能想起来几种呢?
先说下要求,就是三个线程,假设是线程 1,2,3, 现在的要求是:必须是线程 1 先执行,然后线程 2 再执行,最后是线程 3 执行
然后有几种实现方法呢?
其实它的本质就是实现,让线程 2,3 等待线程 1 执行完毕,所以重点就是有哪些方法可以让线程 2,3 等待
join
第一反应应该就是使用 join 方法,因为 join 本来就是支持这种机制的
比如,我在线程 B 中调用了线程 A 的 join 方法,那么线程 B 就会等线程 A 执行结束之后再执行
那么具体应该怎么使用嘞?
别慌嘛,我这里有例子,你瞅瞅:
1 |
|
CountDownLatch
刚才说了,本质就是让线程 B,C 等待线程 A 执行完毕
那么信号量就是一个不错的选择
如果想要实现的话,那大概就是下面这样:
1 |
|
使用单个线程池
之所以线程 1,2,3 的执行顺序无法保证,是因为在编译器可能会去做一些优化,导致没有办法按照顺序执行
如果我们使用单个线程池去执行的话,那就没有这样的问题了
具体实现:
1 |
|
CompletableFuture
如果使用 CompletableFuture 来实现的话,代码就非常简洁了
1 |
|
你有没有其他巧妙的方法呢?