countdownlatch和CyclicBarrier
当前任务要等待其他线程的任务执行完之后在执行。
CountDownLatch countDownLatch = new CountDownLatch(N);
countDownLatch.countDown(); count = N - 1
countDownLatch.await();(阻塞) 当count == 0 的时候 继续执行
怕 子线程执行的过程中 主线程提前结束。主线程资源被回首。那子线程就没法子运行了。
CyclicBarrier 当前线程是要等到所有的线程到达barriar状态后,然后在逗继续执行。
await()会阻塞当前线程 当其他线程都调用await()(await会使线程到达barriar状态)的时候,在继续执行。
c.await();//使线程到达barriar状态
CyclicBarrier 的构造函数
CyclicBarrier c = new CyclicBarrier(N);
CyclicBarrier c = new CyclicBarrier(N, new Runnable(){
@Ovrride
run(){
}
})//这个里面的runnable当所有的线程到达await之后 执行run 然后在执行各自线程的代码。
CyclicBarrier 是可以重用的 。CountDownLatch 不能重用 。因为CountDownLatch是通过控制数量来实现同步,那数量减到0了当然就不能再用了。 但是CyclicBarrier 没有显式的去减数量
Semaphore acquire 和release
Semaphore s = new Semaphore(5);5个锁
s.acquier() 获得一个锁 锁数量大于5的时候才能acquire
s.release 释放一个锁 先acquie 才能release

浙公网安备 33010602011771号