开源一个基于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 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 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() {
    @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() {
    @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 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

你可能感兴趣的:(android,java,线程池,线程,并发,Android,Mobile,Open,Source,&,Free)