1.闭锁CountDownLatch public CountDownLatch(int count):需要等待的线程个数 public void countDown() : 等待的计数器减一 public void await() throws InterruptedException: 调用await方法的线程会阻塞直到计数器值减为0 CountDownLatch的对象当计数器值减为0时,不可恢复。 2.循环栅栏CyclicBarrier public CyclicBarrier(int parties, Runnable barrierAction) parties:同时等待的线程个数 barrierAction:恢复执行之前,随机挑选一个线程执行任务 CyclicBarrier值可以恢复 3.Exchanger-线程交换器 两两线程配对后交换数据再同时恢复执行。 若线程调用Exchanger.exchange(),缓冲区只有一个线程,则当前线程阻塞 直到有另一个线程调用Exchanger.exchange() 4.Semaphore-信号量 public Semaphore(int permits) permits表示许可个数(同时控制的资源个数) acquire()获取许可 release()释放许可
信号量的代码测试;
package Chat; import java.util.concurrent.Semaphore; import java.util.concurrent.TimeUnit; //工人工作任务 class SemaphoreTask implements Runnable{ private Semaphore semaphore; public SemaphoreTask(Semaphore semaphore) { this.semaphore = semaphore; } @Override public void run() { try { semaphore.acquir