java tools api_Java并发工具类tool

一.Semaphore

Semaphore semaphore =new Semaphore(2);-----他是一个AQS的共享锁,可以允许多个线程拿到资源

1.semaphore.acquire()  --------表示阻塞并获取许可public void acquire()throws InterruptedException {

sync.acquireSharedInterruptibly(1);  //调用此方法,通过传参可以看出,调用一次acquire(),获取一个公共资源

}public final void acquireSharedInterruptibly(int arg)

throws InterruptedException {

if (Thread.interrupted())  //判断此线程是否已经中断

throw new InterruptedException();

if (tryAcquireShared(arg) <0) //tryAcquireShared(arg)方法本质调用Sync中的tryAcquireShared()方法,方法内部操作看下图解析

math?formula=%5Ccolor%7Bgreen%7D%7B%2F%2F%E8%BF%9B%E5%85%A5%E6%AD%A4%E6%96%B9%E6%B3%95%2C%E8%AF%B4%E6%98%8EAQS%E4%B8%AD%E8%AE%BE%E7%BD%AE%E7%9A%84%E8%B5%84%E6%BA%90%E6%95%B0%E5%B7%B2%E7%BB%8F%E4%B8%BA0%2C%E8%BF%99%E9%87%8C%E8%BF%9B%E8%A1%8C%E5%85%A5%E9%98%9F%E6%93%8D%E4%BD%9C%7D

doAcquireSharedInterruptibly(arg);

}

9a74ad7aae5d

线程进入后更新AQS中的资源数

9a74ad7aae5d

线程的入队等待操作

2.semaphore.release() ----------表示释放许可(释放公共资源)

9a74ad7aae5d

主要作用:他是一个计数信号,主要需求场景是进行 资源访问,服务限流

semaphore默认创建非公平锁

二.CountDownLatch

1.概念:

CountDownLatch这个类能够使一个线程等待其他线程完成各自的工作后再执行,例如我们打游戏,加载游戏,必须所有玩家都加载成功,才能进入游戏

2.如何工作

CountDownLatch是通过一个计数器来实现的,计数器的初始值为线程的数量,每当一个线程完成了自己的任务,计数器就会减1,当计数器值到达0时,它表示所有的线程已经完成任务,然后在闭锁上等待线程就可以恢复执行任务

3.API

CountDownLatch.countDown() //计数器减1

CountDownLatch.await();//等待所有线程执行完毕

三.CyclicBarrier

1.概念:

栅栏屏障,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程

到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续运行。

CyclicBarrier默认的构造方法是CyclicBarrier(int parties),其参数表示屏障拦截的线

程数量,每个线程调用await方法告CyclicBarrier我已经到达了屏障,然后当前线程被阻塞。

2.API

cyclicBarrier.await()

math?formula=%5Ccolor%7Bred%7D%7B%E6%B3%A8%E6%84%8F%3A%7D

CyclicBarrier必须等到所有初始化的线程都到达同步点,才能继续执行下一步,只要有一个没有到达,那么其他的线程就会一直等待

CyclicBarrier和CountDownLatch还有一个区别就是CyclicBarrier是可以重复使用的

9a74ad7aae5d

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值