当前位置: 首页 > 科技观察

JavaConcurrencyCountDownLatch、CyclicBarrier和Semaphore

时间:2023-03-16 00:42:35 科技观察

本次来说说JUC中同步器的三个主要成员:CountDownLatch、CyclicBarrier和Semaphore(不知道有没有初学者觉得这三个名字不好记).这三个是JUC中比较常用的同步器,可以很方便的实现多线程之间协同的功能。(以下代码来自JDK文档)CountDownLatch直译为CountDownLatch。倒计时就不用说了,门闩的意思,顾名思义,就是阻止进度。这里的意思是CountDownLatch.await()方法会阻塞当前线程,直到倒计时到0。和另一组线程。例如,主线程在做一项工作之前需要进行一系列的准备工作,只有这些准备工作完成后,主线程才能继续工作。这些准备工作相互独立,因此可以并行进行以提高速度。在这种场景下,可以使用CountDownLatch来协调线程间的调度。在直接创建线程的时代(Java5.0之前),我们可以使用Thread.join()。JUC出现后,由于不能直接引用线程池中的线程,必须使用CountDownLatch。例子下面的例子可以理解为F1赛车的维修过程。只有发出startSignal(可以是停止的意思,这个名字可能不太贴切)命令后,维修工才开始工作,等所有工做完后,车子才能继续行驶。.classDriver{//...voidmain()throwsInterruptedException{CountDownLatchstartSignal=newCountDownLatch(1);CountDownLatchdoneSignal=newCountDownLatch(N);for(inti=0;i