static class LatchRunner implements Runnable{
CountDownLatch latch;
public LatchRunner(CountDownLatch latch) {
this.latch = latch;
}
@Override
public void run() {
try {
Thread.sleep(200L);
} catch (InterruptedException e) {
e.printStackTrace();
}
latch.countDown();
System.out.println("LatchRunner finish.");
}
}
static class BarrierRunner implements Runnable{
CyclicBarrier barrier;
public BarrierRunner(CyclicBarrier barrier) {
this.barrier = barrier;
}
@Override
public void run() {
try {
Thread.sleep(200L);
barrier.await();
} catch (InterruptedException | BrokenBarrierException e) {
e.printStackTrace();
}
System.out.println("BarrierRunner finish.");
}
}
public static void main(String[] args) throws Exception {
CountDownLatch latch = new CountDownLatch(2);
Thread[] threads = {new Thread(new LatchRunner(latch)), new Thread(new LatchRunner(latch))};
threads[0].start();
threads[1].start();
latch.await();
System.out.println("main execute1");
CyclicBarrier barrier = new CyclicBarrier(2);
Thread[] threads2 = {new Thread(new BarrierRunner(barrier)), new Thread(new BarrierRunner(barrier))};
threads2[0].start();
threads2[1].start();
System.out.println("main execute2");
}
此博客展示了如何使用Java并发工具类CountDownLatch和CyclicBarrier实现线程间的同步。通过创建LatchRunner和BarrierRunner线程,分别演示了CountDownLatch的倒计时机制以及CyclicBarrier的等待所有线程到达屏障点的功能。在main方法中,创建并启动线程,展示了这两个工具类的实际应用。
1051

被折叠的 条评论
为什么被折叠?



