背景介绍
了解线程的调度有利于我们开发项目
线程调度模型
1、分时调度模型:轮流获取,均分cpu时间
2、抢占式调度模型:优先级搞的获取 jvm采用
Android ui线程的优先级是如下 越小优先级越高
public static final int THREAD_PRIORITY_DEFAULT = 0;
常见的线程的方式
Thread 方式
优点:最简单,最常见异步方式
缺点:不易复用,频繁创建及销毁开销大
复杂场景不易使用
HandlerThread
适合长时间消息队列
IntentService
集成了Service 在内部创建了HandlerThread
执行在异步执行
优先级比较高,不容易被kill
AsyncTask
Android 提供的工具类
无需要自己处理线程切换
线程池
已复用,减少频繁创建,销毁时间
功能强大:并发数控等
Rxjava
由强大的scheduler 集合提供了强大的切换方式
线程使用准则
1、创建线程必须命名,这样方便定位
2、关键一步任务要监控 比如aop监控
3、设置合理的线程优先级
class ThreadPoolUtils {
private static ExecutorService mService= Executors.newFixedThreadPool(5, new ThreadFactory() {
@Override
public Thread newThread(Runnable r) {
Thread thread = new Thread(r);
thread.setName("thread name");
return thread;
}
});
public static ExecutorService getService(){
return mService;
}
}