Thread之并发工具类

CountDownLatch、CyclicBarrier、Semaphore、Exchanger是并发工具类,都通过聚集同步器对并发流程进行控制。CountDownLatch和CyclicBarrier均用于等待其他线程完成工作后本线程才继续执行,不同之处在后者可以循环(cyclic)使用,即出现错误可以使用CyclicBarrier.reset()方法重置屏障。Semaphore用于控制对特定资源的访问数量。Exchanger用于线程之间数据交换。

编程模型

1、CountDownLatch:
public static void main() {
    static CountDownLatch c = new CountDownLatch(3)
    new Thread(new Runnable() {
	    @Override
	    public void run() {
	        //业务逻辑
	        c.countDown();
	    }
    }).start(); //subthread 1
    new Thread(new Runnable() {
	    @Override
	    public void run() {
	        //业务逻辑
	        c.countDown();
	    }
    }).start(); //subthread 2
    c.await();
}
2、CyclicBarrier:
public static void main() {
	static CyclicBarrier c = new CyclicBarrier(2)
	new Thread(new Runnable(){
		@Override
	    public void run() {
	        //业务逻辑
	        try {
		        c.await();
	        } catch (Exception e) {
		
	        }
	    }
	}).start();
	try {
		c.await();
	} catch (Exception e) {
		
	}
}
3、Semaphore
private static semaphore s = new semaphore(6); // 控制6个线程可以访问资源
public static void mian() {
	for (int i = 0; i < THREAD_COUNT; i++) {
		threadPool.execute(new Runnable() {
			@Override
			public void run() {
				s.acquire();
				//资源访问代码
				s.release();
			}
		});
	}
}
4、Exchanger
static Exchanger<MessageData> exchanger = new Exchanger<MessageData>();
public static void main() {
	new Thread(new Runnable() {
		@Override
		public void run() {
			MessageData A = new MessageData("A", 1);
			try {
				exchanger.exchange(A); // 此线程交换走A,获得B
			} catch (InterruptedException e) {

			}
		}
	}).start();
	new Thread(new Runnable() {
		@Override
		public void run() {
			MessageData B = new MessageData("B", 2); //此线程交换走B,获取A
			try {
				exchanger.exchange(B);
			} catch (InterruptedException e) {

			}
		}
	}).start();

} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值