1566733723453
1566733723453:10
上面代码也达到了预期效果,使用CountDownLatch
可以让一个或者多个线程等待一批线程完成之后,自己再继续;CountDownLatch
更详细的介绍见:JUC中等待多线程完成的工具类CountDownLatch,必备技能
方式3:ExecutorService.submit方法实现
代码:
package com.itsoku.chat31;
import java.util.concurrent.*;
/**
* 跟着阿里p7学并发,微信公众号:javacode2018
*/
public class Demo3 {
public static void main(String[] args) throws ExecutionException, InterruptedException {
//创建一个线程池
ExecutorService executorService = Executors.newCachedThreadPool();
System.out.println(System.currentTimeMillis());
Future<Integer> future = executorService.submit(() -> {
try {
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) {
e.printStackTrace();
}
return 10;
});
//关闭线程池
executorService.shutdown();
System.out.println(System.currentTimeMillis());
Integer result = future.get();
System.out.println(System.currentTimeMillis() + “:” + result);
}
}
输出:
1566734119938
1566734119989
1566734122989:10
使用ExecutorService.submit
方法实现的,此方法返回一个Future
,future.get()
会让当前线程阻塞,直到Future关联的任务执行完毕。
相关知识:
方式4:FutureTask方式1
代码:<