Fetch the repository succeeded.
This action will force synchronization from Jon/aTask, which will overwrite any changes that you have made since you forked the repository, and can not be recovered!!!
Synchronous operation will process in the background and will refresh the page when finishing processing. Please be patient.
一个简单的多用途异步任务执行框架
Maven
<dependency>
<groupId>com.github.jonzhang3</groupId>
<artifactId>aTask</artifactId>
<version>1.0.2</version>
</dependency>
TaskEngine engine = new TaskEngine.Builder()
.corePoolSize(3)// 设置核心线程池大小,默认为系统 CPU 核数
.maxPoolSize(100)// 设置线程池的最大大小,默认为 Integer.MAX_VALUE
.keepAliveSeconds(1000)// 设置线程的最大空闲时间,默认为 60 秒
// 设置任务等待队列的大小,默认为 Integer.MAX_VALUE
// 如果设置的为负数,则采用 SynchronousQueue,否则采用 LinkedBlockingQueue
.queueCapacity(20)
// 设置线程池的任务拒绝策略
.rejectedExecutionHandler(RejectedExecutionHandler)
.completedTaskHandler(handler)// 设置对已完成任务的处理回调
.build();
// 可通过 getRunningTasks() 方法获取当前正在执行的任务
Task task = engine.buildTask(ctx -> {
ctx.onProgress(100);// 设置进度值,将调用进度回调函数
ctx.onSuccess("1", "2", "3");// 设置任务执行成功,将调用结果回调函数
ctx.onError(Exception);// 设置任务执行失败,将调用结果回调函数
// 如果 onSuccess 和 onError 都调用了,则第首先执行的方法将会调用成功
})
.type("type")// 设置任务的类型
.id("id")// 设置任务的 ID
.progress(progress -> {})// 设置任务的进度回调
// 设置任务的结果回调
// 如果任务执行失败,error 则不为 null;如果任务执行成功,error 则为 null
.end((ctx, error) -> {
if(error != null) {// 执行成功
ctx.getResult();// 获取 onSuccess 设置的数据
} else {// 执行失败
log.error(error);// 打印错误
}
})
.build();
engine.go(task);// 最后调用 TaskEngine 的 go 方法执行该任务
task.await(); // 该方法会阻塞当前线程,如果你需要等待任务执行完成再继续执行,则调用该方法
ResultTask<String> resultTask = engine.buildResultTask(ctx -> {
ctx.onProgress(200);
return "success";// 返回结果数据
})
.type("type")
.id("id")
.progress(i -> {})
.build();
engine.go(resultTask);
// 获取返回结果
// 该方法会阻塞当前线程
String result = resultTask.get();
TaskGroup group = engine.prepareGroup();// 创建一个任务组
// 添加并执行一个任务
group.go(group.buildItem(ctx -> {
ctx.group().incrementCounter();// 计数器 +1(线程安全)
ctx.group().addData("data");// 设置数据,方便后续使用
}).build());
group.await();// 等待线程组中所有的任务执行完成
group.getCounter();// 获取计数器的结果
Data data = group.getData();// 获取组中任务执行时设置的数据(线程安全)
Sign in for post a comment
Comments ( 0 )