通常一个线程调度器有三个作用:
在任何一个线程环境下(如主线程或子线程)
1.在主线程执行一段代码; (Main)
2.在当前线程执行一段代码;(Default)
3.在IO线程执行一段代码;(IO)
其中在IO线程执行代码通常是用线程池实现。 以下是一个简易的调度工具的代码:
public class SimpleDispatcher {
//核心线程池大小为32,可根据需求修改
public static final int CORE_POOL_SIZE = 32;
//Runnable的启动模式
public enum Mode {
IO, //executed in an IO thread
Sub, //executed in a new thread
Main //executed in main thread
}
//调度器静态单例
private static SimpleDispatcher instance = new SimpleDispatcher();
//获取单例
public static SimpleDispatcher getInstance(){
if(instance == null){
synchronized (SimpleDispatcher.class){
instance = new SimpleDispatcher();
}
}
return instance;
}
//消息处理器
private final Handler mHandler;
//线程池
private final ExecutorService mExecutorService;
//默认构造器
public SimpleDispatcher(){
this(Looper.getMainLooper(),Executors.newScheduledThreadPool(CORE_POOL_SIZE));
}
//自定义构造器
public SimpleDispatcher(Looper looper,ExecutorService executorService){
this.mHandler = new Handler(looper);
this.mExecutorService = executorService;
}
//启动方法
public void launch(Mode mode,Runnable runnable){
switch (mode){
case IO:
mExecutorService.execute(runnable);
break;
case Sub:
runnable.run();
break;
case Main:
mHandler.post(runnable);
break;
}
}
}
使用方法也非常简单,只需要先获取单例(SimpleDispatcher.getInstance())然后调用launch方法,就可以通过设置Mode指定一个Runnable运行在哪一个线程环境。
为了简化调用,也可以将代码如此简化。
/**
* Mini Dispatcher
*/
public class Mind extends SimpleDispatcher{
static void run(Mode mode,Runnable runnable){
getInstance().launch(mode,runnable);
}
}
这样就可以静态的调用launch方法了。