多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全IT社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > php開源 > php教程 > java同步工具類之CountDownLatch

java同步工具類之CountDownLatch

來源:程序員人生   發(fā)布時間:2015-05-12 09:19:37 閱讀次數(shù):3886次

    在1些利用場合中,某段程序需要等待某個條件到達要求后才能履行,或等待1定長的時間后此行,從jdk1.5開始就能夠使用CountDownLatch實現(xiàn),    
    CountDownLatch類是1個同步倒數(shù)計數(shù)器,構(gòu)造時傳入int參數(shù),該參數(shù)就是計數(shù)器的初始值,每調(diào)用1次countDown()方法,計數(shù)器減1,計數(shù)器大于0 時,await()方法會阻塞后面程序履行,直到計數(shù)器為0。
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("線程" + Thread.currentThread().getName() + "正準備接受命令"); cdOrder.await(); System.out.println("線程" + Thread.currentThread().getName() + "已接受命令"); Thread.sleep((long)(Math.random()*10000)); System.out.println("線程" + 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("線程" + Thread.currentThread().getName() + "行將發(fā)布命令"); cdOrder.countDown(); System.out.println("線程" + Thread.currentThread().getName() + "已發(fā)送命令,正在等待結(jié)果"); cdAnswer.await(); System.out.println("線程" + Thread.currentThread().getName() + "已收到所有響應(yīng)結(jié)果"); } catch (Exception e) { e.printStackTrace(); } service.shutdown(); } }

             上面示例初始化兩個CountDownLatch示例,分外傳入初始值1和3,cdOrder.await()后面的代碼,將會被阻塞,直到調(diào)用1次cdOrder.countDown()后才向下履行;cdAnswer.await()后面代碼阻塞,調(diào)用3次cdAnswer.countDown()向下履行。

             所以上面履行結(jié)果:

線程pool⑴-thread⑴正準備接受命令
線程pool⑴-thread⑶正準備接受命令
線程pool⑴-thread⑵正準備接受命令
線程main行將發(fā)布命令
線程main已發(fā)送命令,正在等待結(jié)果
線程pool⑴-thread⑴已接受命令
線程pool⑴-thread⑵已接受命令
線程pool⑴-thread⑶已接受命令
線程pool⑴-thread⑵回應(yīng)命令處理結(jié)果
線程pool⑴-thread⑶回應(yīng)命令處理結(jié)果
線程pool⑴-thread⑴回應(yīng)命令處理結(jié)果
線程main已收到所有響應(yīng)結(jié)果

await(long timeout, TimeUnit unit),是等待1定時間,然后履行,不管計數(shù)器是不是到0了。

下面例子來源:http://www.blogjava.net/freeman1984/archive/2011/07/04/353654.html

10個同學(xué)上車,車等待同學(xué)上車,如果有等待時間限制,到時間就開走,不管學(xué)生上沒上完。如果沒有等待時間,學(xué)生上完了再開:

public class CountDownLatchTest { public static int numberOfPeople = 10;//等車的學(xué)生數(shù) public static boolean isGone = false;//車開的標志 public static int carWaitTime = 3;//車等的時間 public static void main(String[] args) throws InterruptedException { CountDownLatch waitStudentsGetOn = new CountDownLatch(numberOfPeople); new Thread(new GetOn(waitStudentsGetOn)).start(); waitStudentGetOn(waitStudentsGetOn);//等所有的學(xué)生上車 driveHome();//開車走 } private static void waitStudentGetOn(CountDownLatch waitStudentsGetOn) throws InterruptedException { System.out.println("趕快的,抓緊時間上車.."); waitStudentsGetOn.await(carWaitTime, TimeUnit.SECONDS);//等5秒,還沒上車,就開走。。 } private static void driveHome() throws InterruptedException { System.out.println("開車,鞋兒破 帽兒破 身上的袈裟破 你笑我 他笑我 1把扇兒破"); isGone = true; } } class GetOn implements Runnable{ private CountDownLatch waitStudentsGetOn; GetOn(CountDownLatch waitStudentsGetOn){ this.waitStudentsGetOn = waitStudentsGetOn; } public void run() { for (int i = 0; i < CountDownLatchTest.numberOfPeople; i++) { try { if(CountDownLatchTest.isGone){ System.out.println("媽的,還差:"+waitStudentsGetOn.getCount()+" 個沒娃上車呢.怎樣車走了"); break; } boolean goonSuccess = new Student(i+1).getOn();//順序上車 if(goonSuccess)waitStudentsGetOn.countDown(); } catch (InterruptedException e) {} if(waitStudentsGetOn.getCount()!=0l){ System.out.println("還差:"+(waitStudentsGetOn.getCount())+" 個沒上車"); }else{ System.out.println("都上車了"); } } } class Student{ private int myNum;//學(xué)生編號 public Student(int num){ this.myNum = num; } //上車 public boolean getOn() throws InterruptedException{ Thread.currentThread().sleep(new Random().nextInt(2)*1000);//上車使用的時間,隨機 if(CountDownLatchTest.isGone){ return false;//不能上了,上車失敗 } System.out.print("編號為:"+myNum+"的同學(xué)上車了.."); return true; } } }


‘     


生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 久久乐国产综合亚洲精品 | 快色成人 | 国产v综合v亚洲欧美大另类 | 日本wwwcom| 日韩乱码视频 | 亚洲大片在线观看 | 欧美综合色 | 午夜dj在线观看免费视频 | 亚洲图片偷拍自拍 | 国产精品久久亚洲一区二区 | 久久欧美精品欧美九久欧美 | 亚洲视频一区二区 | 美女福利在线观看 | 免费一级毛片在线观看 | 日韩一级一欧美一级国产 | 亚洲欧美一区二区三区九九九 | 久草成人在线 | 国产性夜夜春夜夜爽30 | 真人性做爰aa毛片免费视频观看 | h网在线 | 国产精品高清一区二区三区 | 国产成人免费在线视频 | 中文在线视频观看 | 亚洲一区网站 | 国产亚洲综合一区在线 | 狂野欧美性猛交xxxx乱大交 | 国产系列 视频二区 | 久久欧美精品欧美久久欧美 | 小毛片网站 | 一区二区三区四区视频在线观看 | 色偷偷亚洲女人天堂观看欧 | 国产69精品久久久久99不卡 | 国产福利不卡视频在免费播放 | 国产美女无遮挡免费网站 | 欧美性受xxxx黑人xyx性爽 | 欧美疯狂性受xxxxx另类 | 亚洲欧美成aⅴ人在线观看 亚洲欧美成人 | 2022国产成人精品福利网站 | 欧美办公室系列激情videos | jyzz日本| 欧美极品jiizzhd欧美 |