Semaphore
信号量或者说叫管理器,它其实不是对资源加锁,而是控制最多N个线程可以同时访问资源。类似停车场,如果停满了,只能等待。
CountDownLatch
完成线程的协作,等所有线程执行完之后再执行
用join可以实现同样的功能,但是join在线程池的情况下不能使用
latch.countDown();
计数器减一
latch.await();
等待所有线程结束后继续往下执行
CyclicBarrier
循环栅栏,也是线程协作。等线程数满足计数器时,才开始执行,比如等待人齐了开始干活。
cb.await();
// 当个数不足时,等待
也可以在所有任务开始之前进行某些任务,所有线程的await()之后先执行下面线程方法。
CyclicBarrier cb = new CyclicBarrier(2, new Runnable() {
@Override
public void run() {
System.out.println("哈哈");
}
}) ;
网友评论