java.util.concurrent.CountDownLatch类
当想让某个线程等待指定的线程终止时,可以使用java.lang.Thread类的join方法。但是,由于join方法可以等待的只是“线程终止”这个一次性的操作,所以无法使用它实现“等待指定次数的某种操作发生”。
使用java.util.concurrent.CountDownLatch类可以实现“等待指定次数的CountDown方法被调用”这一功能。
Main.java
1 | import java.util.concurrent.CountDownLatch; |
MyTask.java
1 | import java.util.Random; |
运行结果
1 | BEGIN |
时序图
java.util.concurrent.CyclicBarrier类
CountDownLatch类只能进行倒数计数。也就是说,一旦计数值变为0后,即使调用await方法,主线程也会立即返回。
当想多次重复进行线程同步时,使用java.util.concurrent.CyclicBarrier类会很方便。
CyclicBarrier可以周期性地(cyclic)创建出屏障(barrier)。在屏障解除之前,碰到屏障的线程是无法继续前进的。屏障的解除条件是到达屏障处的线程个数达到了构造函数指定的个数。也就是说,当指定个数的线程到达屏障处后,屏障就会被解除,然后这些线程就会一起冲出去。
Main.java
1 | import java.util.concurrent.CountDownLatch; |
MyTask.java
1 | import java.util.Random; |
运行结果
1 | BEGIN |