<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    瘋狂

    STANDING ON THE SHOULDERS OF GIANTS
    posts - 481, comments - 486, trackbacks - 0, articles - 1
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    CountDownLatch 簡介和例子

    Posted on 2011-07-04 17:14 瘋狂 閱讀(9970) 評論(3)  編輯  收藏 所屬分類: java concurrent
        在一些應用場合中,某段程序需要等待某個條件達到要求后才能執行,或者等待一定長的時間后此行,從jdk1.5開始就可以使用CountDownLatch實現,    
      CountDownLatch類是一個同步倒數計數器,構造時傳入int參數,該參數就是計數器的初始值,每調用一次countDown()方法,計數器減1,計數器大于0 時,await()方法會阻塞后面程序執行,直到計數器為0,await(long timeout, TimeUnit unit),是等待一定時間,然后執行,不管計數器是否到0了。
    下面舉一個等車的例子:
    10個同學上車,車等待同學上車,如果有等待時間限制,到時間就開走,不管學生上沒上完。如果沒有等待時間,學生上完了再開:
    public class CountDownLatchTest {
        
    public static int numberOfPeople = 10;//等車的學生數
        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);
    //等所有的學生上車
            
            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(
    "開車,鞋兒破 帽兒破 身上的袈裟破 你笑我 他笑我 一把扇兒破");
            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;//學生編號
             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+"的同學上車了..");
                 
    return true;
             }

        }

    }


    評論

    # re: CountDownLatch 簡介和例子  回復  更多評論   

    2014-01-19 12:02 by bo_hai
    carWaitTime = 3 是等待3秒吧?

    # re: CountDownLatch 簡介和例子  回復  更多評論   

    2014-01-19 12:09 by bo_hai
    這個模擬實例很好。博主對 CountDownLatch 理解很正確。

    # re: CountDownLatch 簡介和例子  回復  更多評論   

    2014-12-14 14:06 by xsank
    看到了countdownlatch的await用法,謝樓主分享
    主站蜘蛛池模板: 亚洲人成网站色7799| 亚洲一区免费观看| 亚洲av日韩av不卡在线观看| 国产人成免费视频网站| 极品色天使在线婷婷天堂亚洲 | 99爱在线观看免费完整版| 亚洲videos| 亚洲精品国产精品乱码视色| 毛片网站免费在线观看| 两个人www免费高清视频| 最新国产成人亚洲精品影院| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 久久久久久久免费视频| 无码AV动漫精品一区二区免费| 亚洲综合激情九月婷婷 | 久久久久亚洲AV无码专区首| 日美韩电影免费看| 午夜免费福利视频| 一个人看的免费视频www在线高清动漫| 亚洲色偷偷偷网站色偷一区| 亚洲乱码中文字幕综合234| 成年人免费的视频| 大地资源在线资源免费观看 | 日本精品人妻无码免费大全 | 亚洲午夜av影院| 成年男女免费视频网站| 日韩视频免费在线观看| 国产精品亚洲专区在线播放 | 97免费人妻在线视频| 一出一进一爽一粗一大视频免费的| 亚洲熟妇无码爱v在线观看| 亚洲女初尝黑人巨高清| 高清在线亚洲精品国产二区| 免费观看黄网站在线播放| 久久久久久久99精品免费观看| 日本中文字幕免费看| 亚洲AV成人精品日韩一区| 亚洲av乱码一区二区三区| 久久亚洲精品成人av无码网站| 亚洲一区二区三区偷拍女厕| 亚洲国产成人影院播放|