当前位置:网站首页>Callable 的使用
Callable 的使用
2022-07-29 05:27:00 【魔道不误砍柴功】
package com.xxl.job.admin.mytest;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.*;
import java.util.stream.Collectors;
class Task implements Callable<String> {
private String taskName;
private ThreadPoolExecutor executorPool;
public List<Task> depencTasks = new ArrayList<>();
private int execTime = 0;
public Task(String taskName, ThreadPoolExecutor executorPool, int execTime) {
this.taskName = taskName;
this.executorPool = executorPool;
this.execTime = execTime;
}
@Override
public String call() throws Exception {
List<Future<String>> futures = depencTasks.stream().map(r -> executorPool.submit(r)).collect(Collectors.toList());
futures.forEach(r-> {
try {
r.get();
} catch (InterruptedException e) {
throw new RuntimeException(e);
} catch (ExecutionException e) {
throw new RuntimeException(e);
}
});
TimeUnit.SECONDS.sleep(execTime );
System.out.println("time=+"+new Date()+",taskName="+taskName+",thread:"+Thread.currentThread());
return "time"+new Date()+"+,taskName="+taskName;
}
}
public class ThreadPoll {
public static void main(String[] args) {
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
4,
4,
0L,
TimeUnit.SECONDS,
new LinkedBlockingQueue<>(100),
Executors.defaultThreadFactory(),
new ThreadPoolExecutor.CallerRunsPolicy());
Task task1 = new Task("task1",threadPoolExecutor,0);
Task task2 = new Task("task2",threadPoolExecutor,1);
Task task3 = new Task("task3",threadPoolExecutor,1);
Task task4 = new Task("task4",threadPoolExecutor,1);
Task task5 = new Task("task5",threadPoolExecutor,10);
Task task6 = new Task("task6",threadPoolExecutor,10);
Task task7 = new Task("task7",threadPoolExecutor,1);
Task task8 = new Task("task8",threadPoolExecutor,1);
Task task9 = new Task("task9",threadPoolExecutor,1);
task1.depencTasks.add(task2);
task1.depencTasks.add(task3);
task1.depencTasks.add(task4);
task1.depencTasks.add(task5);
task1.depencTasks.add(task6);
task2.depencTasks.add(task7);
task3.depencTasks.add(task8);
task4.depencTasks.add(task9);
System.out.println("start time:"+new Date());
threadPoolExecutor.submit(task1);
}
}
运行结果:
start time:Tue Jul 19 16:23:57 CST 2022
time=+Tue Jul 19 16:23:58 CST 2022,taskName=task7,thread:Thread[pool-1-thread-4,5,main]
time=+Tue Jul 19 16:23:59 CST 2022,taskName=task2,thread:Thread[pool-1-thread-2,5,main]
time=+Tue Jul 19 16:24:09 CST 2022,taskName=task5,thread:Thread[pool-1-thread-2,5,main]
time=+Tue Jul 19 16:24:19 CST 2022,taskName=task6,thread:Thread[pool-1-thread-2,5,main]
time=+Tue Jul 19 16:24:20 CST 2022,taskName=task8,thread:Thread[pool-1-thread-2,5,main]
time=+Tue Jul 19 16:24:21 CST 2022,taskName=task3,thread:Thread[pool-1-thread-3,5,main]
time=+Tue Jul 19 16:24:21 CST 2022,taskName=task9,thread:Thread[pool-1-thread-2,5,main]
time=+Tue Jul 19 16:24:22 CST 2022,taskName=task4,thread:Thread[pool-1-thread-4,5,main]
time=+Tue Jul 19 16:24:22 CST 2022,taskName=task1,thread:Thread[pool-1-thread-1,5,main]
边栏推荐
- day17_ Under collection
- 软件测试的优势有哪些?看看你了解多少.....
- Hongke education you want to enter the field of TSN? Hongke teaches you how to build TSN test system
- FIR滤波器设计(1)——利用matlab的fdatool工具箱设计FIR滤波器参数
- day16-集合上
- Complex floating point multiplication of vivado IP core floating point
- Clickhouse failed to import CSV without error but no data
- 8、 Network security
- 解决文件大导致磁盘满的问题
- ping 原理
猜你喜欢
随机推荐
Six common ways for hackers to attack servers
IPv6 representation and configuration cases
失效的访问控制
软件包设置成——>YUM源
pairs和ipairs的区别
解决文件大导致磁盘满的问题
Hongke education you want to enter the field of TSN? Hongke teaches you how to build TSN test system
Sequence list and linked list
centos 部署postgresql 13
如何在开发板上使用sftp命令访问sftp-server
FPGA—奇偶数分频和小数分频代码例程
四、 局域网和城域网
day13_ Under multithreading
LVM逻辑卷组的管理
day03_1_流程控制
10种常见的软件架构模式
Scanbasepackages scanning range configuration
What is the basic principle of Library collision and library collision attack
Use of for statement in Verilog
day14_ Unit test & Date common class & String common class









