Java并发学习笔记(15)信号量(Semaphore) 关卡((2)CyclicBarrier)

信号量

(1)计数信号量可以控制同时访问某特定资源的活动数量,或者同时执行某一给定操作的数量.

a)   信号量可以实现资源池(线程池)和规定无界容器的边界

b)   信号量为1的可以作为特定线程的互斥锁

(2)Java使用Semaphore类作为信号量类,acquire可以获取一个或多个量,release可以归还一个或者多个量

关卡

(1)关卡类似闭锁,但是关卡是需要所有线程到达一个状态后才能一起处理,而不是倒计...关卡就像朋友约会,等所有人到达后我们一起商议接下来去哪.去干吗..

(2)CyclicBarrier是java中的关卡类

a)        当使用CyclicBarrier的await方法到达给定数量后,就会将阻塞的所有线程开始执行.

b)       如果对await的调用失败(超时),或者被await阻塞的线程被中断,则视为此关卡失败.对所有使用await阻塞的线程抛出BrokenBarrierException异常终止.既所有线程都将停止

c)        使用reset方法也会对所有阻塞的线程抛出BrokenBarrierException.

d)       CyclicBarrier可以在构造中指定一个当所有线程到达关卡时一起运行的任务.

(3)Exchanger是关卡的另一种形式

a)        Exchanger使用exchange方法在两个线程中交换对象,变相的为两个线程之间提供了安全发布机制.


你可能感兴趣的:(java,c,Semaphore,活动,任务,Exchange)