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

ARTaskQueue是一款基于Java ExecutorService的线程池封装类,为用户提供简单易用的接口来管理并发线程、添加及执行各种任务,如网络请求、数据库操作等,并能获取任务状态和执行结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值