构建一个简易的线程调度工具(三)工具类编写

本文介绍了如何使用SimpleDispatcher这个工具来在主线程、子线程和IO线程中调度Runnable,通过自定义模式和静态方法简化多线程编程。
摘要由CSDN通过智能技术生成

通常一个线程调度器有三个作用:
在任何一个线程环境下(如主线程或子线程)
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方法了。

完整的demo地址:https://github.com/c105ure/SimpleDispatcher

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值