AQS的同步组件应用:CountDownLatch、Cyclicbarrier、Semaphore

同步:并发的线程在某一关键点上可能需要相互等待通知或互通消息,这种机制叫线程同步。

他们几个底层实现都是AQS,是jdk并发包里提供的并发工具类,注意,他们是工具类,跟我们平时自己写的或使用的工具类一样,目的是帮助我们处理并发的流程控制或解决我们多线程时遇到的一些问题(如:多线程互相等待通知、模拟并发等)

CountDownLatch

可以让线程等待其他线程完成操作后自己再干。

它跟join类似,可以让主线程暂停子线程先去执行;它又比join灵活,join只能是子线程完全执行完才会通知主线程,countDownLatch可以让子线程在任意时刻显示通知主线程,主线程接到通知后可以跟子线程一块执行;实现功能又可以跟FutureTask差不多,FutureTask可以返回子线程处理任务的状态,主线程里不断的while循环判断判断子线程状态是否是done,这种方式占用的是cpu资源,因为他要忙循环不断检查所有子线程都处理完,countDownLatch的实现机制是主线程暂停后就“挂起”了,释放了cpu,等所有子线程完成后再通知主线程,这种方式引起线程间上下文切换,耗性能。

用法:

public class CountDownLatchTest {
    public static void main(String[] args) {
        CountDownLatch taskLock = new CountDownLatch(3);
       Thread thread1 = new Thread(()->{
               String name = Thread.currentThread().getName();
               System.out.println(name+":处理业务");
               taskLock.countDown();
               System.out.println(name+":调用完毕释放资源,同步状态剩余:"+taskLock.getCount());
       },"Thread-1");
        Thread thread2 = new Thread(()->{
                String name = Thread.currentThread().getName();
                System.out.println(name+":处理业务");
                taskLock.countDown();
                System.out.println(name+":调用完毕释放资源,同步状态剩余
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值