(代码来源网络共享)
这几个工具类其实说白了就是为了能够更好控制线程之间的通讯问题~
CountDownLatch
是一个同步的辅助类,允许一个或多个线程一直等待,直到其它线程完成它们的操作。
常用的API其实就两个:await()
和countDown()
例子:例子:rodert现在去做实习生了,其他的员工还没下班,rodert不好意思先走,等其他的员工都走光了,rodert再走。
package threadMy;
import java.util.concurrent.CountDownLatch;
public class CountDownLatchTest {
public static void main(String[] args) {
final CountDownLatch countDownLatch = new CountDownLatch(5);
System.out.println("现在6点下班了.....");
// rodert线程启动
new Thread(new Runnable() {
@Override
public void run() {
try {
// 这里调用的是await()不是wait()
countDownLatch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("...其他的5个员工走光了,rodert终于可以走了");
}
}).start();
// 其他员工线程启动
for (int i = 0; i < 5; i++) {
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("员工xxxx下班了");
countDownLatch.countDown();
}
}).start();
}
}
}
CyclicBarrier