中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

多線(xiàn)程之CountDownLatch工具類(lèi)

2018-07-20    來(lái)源:open-open

容器云強(qiáng)勢(shì)上線(xiàn)!快速搭建集群,上萬(wàn)Linux鏡像隨意使用

CountDownLatch 是一個(gè)通用同步工具,它有很多用途。將計(jì)數(shù) 1 初始化的 CountDownLatch 用作一個(gè)簡(jiǎn)單的開(kāi)/關(guān)鎖存器,或入口:在通過(guò)調(diào)用countDown() 的線(xiàn)程打開(kāi)入口前,所有調(diào)用 await 的線(xiàn)程都一直在入口處等待。用 N 初始化的 CountDownLatch 可以使一個(gè)線(xiàn)程在N 個(gè)線(xiàn)程完成某項(xiàng)操作之前一直等待,或者使其在某項(xiàng)操作完成 N 次之前一直等待。

CountDownLatch 的一個(gè)有用特性是,它不要求調(diào)用 countDown 方法的線(xiàn)程等到計(jì)數(shù)到達(dá)零時(shí)才繼續(xù),而在所有線(xiàn)程都能通過(guò)之前,它只是阻止任何線(xiàn)程繼續(xù)通過(guò)一個(gè)await。  

使用場(chǎng)景:

可以實(shí)現(xiàn)一個(gè)人(也可以是多個(gè)人)等待其他所有人來(lái)通知他,也可以實(shí)現(xiàn)一個(gè)人通知多個(gè)人。

類(lèi)似裁判一聲口令,所有運(yùn)動(dòng)員開(kāi)始跑步,所有運(yùn)動(dòng)員到達(dá)終點(diǎn)后需要裁判員報(bào)告成績(jī),裁判員公布結(jié)果。

實(shí)現(xiàn)如下:

package andy.thread.test;  
  
import java.util.concurrent.CountDownLatch;  
import java.util.concurrent.ExecutorService;  
import java.util.concurrent.Executors;  
  
/** 
 * @author Zhang,Tianyou 
 * @version 2014年11月9日 下午2:34:34 
 */  
  
public class CountdownLatchTest {  
  
    public static void main(String[] args) {  
        ExecutorService service = Executors.newCachedThreadPool();  
        final CountDownLatch cdOrder = new CountDownLatch(1);  
        final CountDownLatch cdAnswer = new CountDownLatch(3);  
        for (int i = 0; i < 3; i++) {  
            Runnable runnable = new Runnable() {  
                public void run() {  
                    try {  
                        System.out.println("線(xiàn)程"  
                                + Thread.currentThread().getName() + "正準(zhǔn)備接受命令");  
                        cdOrder.await();  
                        System.out.println("線(xiàn)程"  
                                + Thread.currentThread().getName() + "已接受命令");  
                        Thread.sleep((long) (Math.random() * 10000));  
                        System.out  
                                .println("線(xiàn)程"  
                                        + Thread.currentThread().getName()  
                                        + "回應(yīng)命令處理結(jié)果");  
                        cdAnswer.countDown();  
                    } catch (Exception e) {  
                        e.printStackTrace();  
                    }  
                }  
            };  
            service.execute(runnable);  
        }  
        try {  
            Thread.sleep((long) (Math.random() * 10000));  
  
            System.out.println("線(xiàn)程" + Thread.currentThread().getName()  
                    + "即將發(fā)布命令");  
            cdOrder.countDown();  
            System.out.println("線(xiàn)程" + Thread.currentThread().getName()  
                    + "已發(fā)送命令,正在等待結(jié)果");  
            cdAnswer.await();  
            System.out.println("線(xiàn)程" + Thread.currentThread().getName()  
                    + "已收到所有響應(yīng)結(jié)果");  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
        service.shutdown();  
  
    }  
  
}  

運(yùn)行結(jié)果如下:

線(xiàn)程pool-1-thread-2正準(zhǔn)備接受命令
線(xiàn)程pool-1-thread-1正準(zhǔn)備接受命令
線(xiàn)程pool-1-thread-3正準(zhǔn)備接受命令
線(xiàn)程main即將發(fā)布命令
線(xiàn)程main已發(fā)送命令,正在等待結(jié)果
線(xiàn)程pool-1-thread-3已接受命令
線(xiàn)程pool-1-thread-2已接受命令
線(xiàn)程pool-1-thread-1已接受命令
線(xiàn)程pool-1-thread-1回應(yīng)命令處理結(jié)果
線(xiàn)程pool-1-thread-2回應(yīng)命令處理結(jié)果
線(xiàn)程pool-1-thread-3回應(yīng)命令處理結(jié)果
線(xiàn)程main已收到所有響應(yīng)結(jié)果

標(biāo)簽:

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請(qǐng)與原作者聯(lián)系。

上一篇:PHP把全角數(shù)字轉(zhuǎn)為半角數(shù)字

下一篇:PHP采集騰訊微博只留文字部分