java多线程之CyclicBarrier

CyclicBarrier是一个同步的辅助类,允许一组线程相互之间等待,达到一个共同点,再继续执行。
优点:可重用;
应用场景:多个线程达到一致条件后继续执行。

示例代码:

CyclicBarrierTest类:

public class CyclicBarrierTest {
	
	private CyclicBarrier cyclicBarrier = new CyclicBarrier(3);
	private static int balance = 0;
	
	public void afterWrite() {
		
		for (int i = 0; i < 3; i++) {
			new Thread(new Runnable() {
				public void run() {
					System.out.println(Thread.currentThread().getName() + "客户端正在存钱...");
					balance = balance + 100;
					try {
						//随机睡眠时间,模拟存款时间
						Thread.sleep(new Random().nextInt(1500));
						System.out.println(Thread.currentThread().getName() + "客户端存钱完毕");
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					
					try {
						//等待其它客户端存完钱
						cyclicBarrier.await();
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					} catch (BrokenBarrierException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					System.out.println(Thread.currentThread().getName() + "客户端查询余额为:" + balance);
				}
			}).start();
		}
	}
}

Main类:

public class Main {
	
	public static void main(String[] args) throws Exception {
        System.out.println("------------cyclicBarrier测试-------------------");
		new CyclicBarrierTest().afterWrite();
}

测试结果:

从测试结果可以看到,只有所有客户端操作完毕后,查询余额操作才能继续执行。

猜你喜欢

转载自blog.csdn.net/m0_38075425/article/details/81607131