1.Java的CountDownLatch
CountDownLatch是一個(gè)同步輔助類(lèi)韧掩,在完成一組正在其他線程中執(zhí)行的操作之前紊浩,它允許一個(gè)或多個(gè)線程一直等待。
主要方法
public CountDownLatch(int count);
public voidcountDown();
public voidawait() throwsInterruptedException
構(gòu)造方法參數(shù)指定了計(jì)數(shù)的次數(shù)
countDown方法疗锐,當(dāng)前線程調(diào)用此方法坊谁,則計(jì)數(shù)減一
await方法,調(diào)用此方法會(huì)一直阻塞當(dāng)前線程滑臊,直到計(jì)時(shí)器的值為0
2.Thread.join
Thead.join方法同樣可以使當(dāng)前線程阻塞口芍,直到另一個(gè)線程執(zhí)行完畢。
用法:
public class A(){
?doSomeThing;
B.join();
doSomeThing After B finish;
}
在Thread A中調(diào)用Thread B的join方法雇卷。A線程阻塞鬓椭,B線程執(zhí)行,B線程執(zhí)行完畢后关划,A線程繼續(xù)執(zhí)行
另外Java還有一個(gè)和CountDownLatch類(lèi)很相似的同步輔助類(lèi)CyclicBarrier小染。它允許一組線程互相等待,直到到達(dá)某個(gè)公共屏障點(diǎn) (common barrier point)贮折。使用場(chǎng)景是需要所有的子任務(wù)都完成時(shí)裤翩,才執(zhí)行主任務(wù)。這篇博客中有例子:http://blog.csdn.net/shihuacai/article/details/8856407