开源一个基于Java ExecutorService的线程池包装类ARTaskQueue

ARTaskQueue

ARTaskQueue是一个基于Java ExecutorService的线程池包装类,对上层代码提供简单易用的接口方法,使上层代码聚焦业务而无需繁琐实现线程池的细节代码。

Github地址:https://github.com/longjun3000/ARTaskQueue


ARTaskQueue现有的功能:

1、管理并发线程,可以1个线程串行,也可以自定义并发线程数;

2、可以添加任务,执行任意Callable任务,比如网络存取、数据库存取、复杂计算等等;

3、可以对某一任务执行取消、得到状态/执行结果;可以取消未执行的任务;可以手动控制队列开始/停止;

4、队列中所有任务完成后有回调,可以得到每个任务的执行状况以及返回值。


如何使用?

Android

// 实例化任务队列对象
final TaskQueue taskQueue = new TaskQueue();
// 设置并发线程数量
taskQueue.setMaxConcurrentThreadCount(4);
// 添加第1个任务
taskQueue.add("task1", new Callable<String>() {
    String resultStr = null;
    @Override
    public String call() throws Exception {
        System.out.println(">>> task1 start execute");

        String resultStr = httpGet("http://www.baidu.com");

        System.out.println(">>> task1 finished time: " + (new Date().toString()));
        return resultStr;
    }
});
// 添加第2个任务
taskQueue.add("task2", new Callable<String>() {
    String resultStr = null;
    @Override
    public String call() throws Exception {
        System.out.println(">>> task2 start execute");

        try {
            resultStr = httpGet("http://www.163.com");
        }
        catch (Exception e) {
            // 如果任务2执行出错则取消后面的任务执行,队列将结束
            taskQueue.cancelAllUnexecuted();
        }
        System.out.println(">>> task2 finished time: " + (new Date().toString()));
        return resultStr;
    }
});
// 添加第3个任务
taskQueue.add("task3", new Callable<Integer>() {
    @Override
    public Integer call() throws Exception {
        System.out.println(">>> task3 start execute");
        System.out.println(">>> task3 finished time: " + (new Date().toString()));
        return Integer.valueOf(1+1);
    }
});
// 添加第4个任务
taskQueue.add("task4", new Callable<Integer>() {
    @Override
    public Integer call() throws Exception {
        System.out.println(">>> task4 start execute");
        System.out.println(">>> task4 finished time: " + (new Date().toString()));
        return Integer.valueOf(9*9);
    }
});
// 设置整个队列完成后的回调
taskQueue.setQueueFinishedCallback(new TaskQueue.IQueueFinishedCallback() {
    @Override
    public void onFinished(Map<String, Object> result) {
        System.out.println(">>> All task finished, total=" + result.size());
        for (Map.Entry entry : result.entrySet()) {
//                        System.out.println(">>> TaskQueue finished, taskName=" + entry.getKey() + ", value=" + (entry.getValue()==null ? "null" : entry.getValue().toString()) );
            System.out.println(">>> taskName=" + entry.getKey() + ", value=" + entry.getValue());
        }

    }
});
// 开始队列
taskQueue.start();

注:更多例子请参考源码工程下的单元测试例子“TaskQueueUnitTest.java” 或 “TaskQueueAppTest.java”。


ARTaskQueue Github地址:https://github.com/longjun3000/ARTaskQueue

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值