等待多線程完成的CountDownLatch
CountDownLatch允許一個(gè)或者多個(gè)線程等待其他線程完成操作寂曹。
- join方法實(shí)現(xiàn)感憾,其原理在于不停檢查join線程是否完成,如果存活就讓當(dāng)前線程等待境钟,join線程中止后锦担,this.notifyAll()方法調(diào)用
/**
兩個(gè)解析器,需要都解析完之后才能結(jié)束
-
@author pengjunzhe
*/
public class JoinCountDownLatchTest {
public static void main(String[] args) throws InterruptedException {
Thread parse1 = new Thread(new Runnable() {@Override public void run() { ; } }); Thread parse2 = new Thread(new Runnable() { @Override public void run() { System.out.println("parser2 finish"); } }); parse1.start(); parse2.start(); parse1.join(); parse2.join(); System.out.println("all parse finished");
}
}
- CountDownLatch實(shí)現(xiàn), countDown()方法計(jì)數(shù)器減一吱韭,await()方法阻塞當(dāng)前線程吆豹,直到計(jì)數(shù)器變成零。
import java.util.concurrent.CountDownLatch;
/**
* @author pengjunzhe
*/
public class CountDownLatchTest {
static CountDownLatch countDownLatch = new CountDownLatch(2);
public static void main(String[] args) throws InterruptedException {
new Thread(new Runnable() {
@Override
public void run() {
System.out.println(1);
countDownLatch.countDown();
System.out.println(2);
countDownLatch.countDown();
}
}).start();
countDownLatch.await();
System.out.println(3);
}
}