手动创建的线程池使用后务必关闭
public static void main(String[] args)throws Exception {
Console.log(DateUtil.now());
ExecutorService executorService=new ThreadPoolExecutor(5,10,
1L, TimeUnit.SECONDS,
new LinkedBlockingQueue<>(3),
Executors.defaultThreadFactory(),
new ThreadPoolExecutor.AbortPolicy());
CompletableFuture<Void> voidCompletableFuture1 = CompletableFuture.runAsync((new Runnable() {
@Override
public void run() {
Console.log("线程一" + Thread.currentThread().getName());
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}), executorService);
CompletableFuture<Void> voidCompletableFuture2 =CompletableFuture.runAsync((new Runnable() {
@Override
public void run() {
Console.log("线程二" + Thread.currentThread().getName());
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}),executorService);
CompletableFuture.allOf(voidCompletableFuture1,voidCompletableFuture2).get();
executorService.shutdown();
Console.log(DateUtil.now());
}
处理返回数据的多线程
ExecutorService executorService=new ThreadPoolExecutor(5,10,
1L, TimeUnit.SECONDS,
new LinkedBlockingQueue<>(3),
Executors.defaultThreadFactory(),
new ThreadPoolExecutor.AbortPolicy());
Future<Integer> submit = executorService.submit(() -> {
Console.log("线程一" + Thread.currentThread().getName());
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return 10;
});
Future<Integer> submit1 = executorService.submit(() -> {
Console.log("线程二" + Thread.currentThread().getName());
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return 20;
});
Console.log(submit.get()+submit1.get());
executorService.shutdown();
Console.log(DateUtil.now());
|