标签:ble 目标 uac 多个 bmc uos cgi ccm 注意
|
CountDownLatch
|
CyclicBarrier
|
适用场景
|
主线程等待其他工作线程结束
|
多个线程相互等待,直到所有线程都达到一个障碍点Barrier
|
主要方法
|
CountDownLatch(int count) 主线程调用:初始化计数
await() 主线程调用 : 阻塞,直到等待计数为0时解除阻塞
countDown() 工作线程调用 : 计数减1
|
CyclicBarrier(int parties , Runnnable barrierAction) : 初始化参与者数量和障碍点执行Action,action可选,由主线程初始化
await() : 由工作线程调用,每被调用一次,计数便会减少1,并阻塞住当前线程 , 直到所有线程都达到障碍点
|
等待结束
|
各线程之间不再相互影响, 可以继续做自己的事情, 不再执行下一个工作目标。
|
在障碍点到达后, 允许所有线程继续执行,到达下一个目标后,可以恢复使用CyclicBarrier, barrier 在释放等待线程后可以重用
|
异常
|
|
如果其中一个线程由于中断、错误、或者超时导致永久离开障碍点,其他线程也将抛出异常。
|
public Semaphore(int permits) { //参数permits表示许可数目,即同时可以允许多少线程进行访问
sync = new NonfairSync(permits);
}
public Semaphore(int permits, boolean fair) { //这个多了一个参数fair表示是否是公平的,即等待时间越久的越先获取许可
sync = (fair)? new FairSync(permits) : new NonfairSync(permits);
}
Java多线程:CountDownLatch、CyclicBarrier 和 Semaphore
标签:ble 目标 uac 多个 bmc uos cgi ccm 注意
原文地址:http://www.cnblogs.com/ITtangtang/p/7603238.html