CountDownLatch倒计时器,CyclicBarrier循环栅栏,LockSupport线程阻塞⼯具类

CountDownLatch倒计时器

CountDownLatch是⼀个多线程控制⼯具。⽤来控制线程的等待。设置需要countDown的数量num,然后每⼀个线程执⾏完毕后,调⽤countDown()⽅法,⽽主线程调⽤await()⽅法执⾏等待,直到num个⼦线程执⾏了countDown()⽅法 ,则主线程开始继续执⾏。

CyclicBarrier循环栅栏

CyclicBarrier.await()⽅法可能会 抛出两种异常 :⼀个是 InterruptedException ,也就是在等待过程中,线程被中断,应该说这是⼀个⾮常通⽤的异常,⼤部分迫使线程等待的⽅法都可能会抛出这个异常,使得线程在等待时依然可以响应外部紧急事件。另外⼀个异常则是CyclicBarrier特有的 BrokenBarrierException ,⼀旦遇到这个异常,则表示当前的CyclicBarrier已经破损了,可能系统已经没有办法等待所有线程到⻬了。如果继续等待,可能就是徒劳⽆功的,因此就此结束吧。

LockSupport线程阻塞⼯具类 

  • LockSupport是⼀个⾮常⽅便实⽤的线程阻塞⼯具,它可以在线程内任意位置让线程阻塞。和Thread.suspend()相⽐,它弥补了由于resume()在前发⽣,导致线程⽆法继续执⾏的情况。和Object.wait()⽅法相⽐,它不需要先获得某个对象的锁,也不会抛出InterruptedException异常。
  • park()可以阻塞当前线程,其中每⼀个线程都有⼀个许可,该许可默认为[不可⽤]。如果该许可是[可⽤]状态,那么park()⽅法会⽴即返回,消费这个许可,将该许可变更为[不可⽤]状态,流程代码可以继续执⾏。如果该许可是[不可⽤]状态,那么park()⽅法将会阻塞unpark⽅法,将指定线程的⼀个许可变为[可⽤]状态。如下表所示:

 

示例⼀:先执⾏unpark()⽅法再执⾏park()⽅法,也不会造成永久卡死线程。如下所示:

示例⼆:LockSupport.park()还能⽀持中断。但是它不会抛InterruptedException异常。它只会默默的返回,但是我们可以从Thread.interrupted()等⽅法获得中断标记。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值