亚洲好骚综合-亚洲黄色录像-亚洲黄色网址-亚洲黄色网址大全-99久久99久久-99久久99久久精品国产

您的位置:軟件測試 > 開源軟件測試 > 開源軟件測試解決方案 >
一道多線程題目的解決方案
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時間:[ 2014/4/14 13:37:12 ] 推薦標(biāo)簽:多線程 解決方案

  在iteye上看到的一道多線程的題目,參考了一下網(wǎng)友的實現(xiàn),那Eclipse調(diào)試通過,算是對JAVA5的并發(fā)庫有個大致的了解,分享出來,歡迎園里的同學(xué)拍磚。

  題目:

  要求用三個線程,按順序打印1,2,3,4,5.... 71,72,73,74, 75.

  線程1先打印1,2,3,4,5, 然后是線程2打印6,7,8,9,10, 然后是線程3打印11,12,13,14,15。接著再由線程1打印16,17,18,19,20....以此類推, 直到線程3打印到75。

  分析:感覺出題人是要考察一下你是否能夠很好的控制多線程,讓他們有序的進(jìn)行。

  1、線程池:3個線程,需要使用并發(fā)庫的線程池

  2、鎖(lcok):在打印的時候,只允許一個線程進(jìn)入,其他的線程等待

  下面的主要的代碼:

    import java.util.HashMap; 
    import java.util.Map; 
    import java.util.concurrent.CountDownLatch; 
    import java.util.concurrent.utorService; 
    import java.util.concurrent.utors; 
    import java.util.concurrent.locks.Condition; 
    import java.util.concurrent.locks.Lock; 
    import java.util.concurrent.locks.ReentrantLock; 
    public class NumberPrinter { 
        private Lock lock = new ReentrantLock(); 
        private Condition c1 = lock.newCondition(); 
        private Condition c2 = lock.newCondition(); 
        private Condition c3 = lock.newCondition(); 
        private Map<Integer, Condition> condtionContext =  
            new HashMap<Integer, Condition>(); 
        public NumberPrinter() { 
            condtionContext.put(Integer.valueOf(0), c1); 
            condtionContext.put(Integer.valueOf(1), c2); 
            condtionContext.put(Integer.valueOf(2), c3); 
        } 
         
        private int count = 0;    
         
        public void print(int id) { 
            lock.lock(); 
            try { 
                while(count*5 < 75) { 
                    int curID = calcID(); 
                    if (id == curID) { 
                        for (int i = 1; i<=5; i++) { 
                            System.out.print(count*5 +i+ ","); 
                        } 
                        System.out.println(); 
                        count++; 
                        int nextID = calcID(); 
                        Condition nextCondition = condtionContext.get( 
                                Integer.valueOf(nextID)); 
                        //通知下一線程
                        nextCondition.signal(); 
                    } else { 
                        Condition condition = condtionContext.get( 
                                Integer.valueOf(id)); 
                        condition.await(); 
                    } 
                } 
                //通知線程結(jié)束
                for(Condition c : condtionContext.values()) { 
                    c.signal(); 
                } 
            } catch (Exception e) { 
                e.printStackTrace(); 
            } finally { 
                lock.unlock(); 
            } 
        } 
         
        private int calcID() { 
            // TODO Auto-generated method stub
            return count % 3; 
        } 
        /**
         * @param args
         */
        public static void main(String[] args) { 
            utorService executor = utors.newFixedThreadPool(3); 
            final CountDownLatch latch = new CountDownLatch(1);    
            final NumberPrinter printer = new NumberPrinter();  
            for (int i = 0; i < 3; i++) {    
                final int id = i; 
                executor.submit(new Runnable() { 
                    @Override
                    public void run() { 
                        // TODO Auto-generated method stub
                        try { 
                            latch.await(); 
                        } catch (InterruptedException e) { 
                            // TODO Auto-generated catch block
                            e.printStackTrace(); 
                        } 
                        printer.print(id); 
                    } 
                }); 
            } 
            System.out.println("三個任務(wù)開始順序打印數(shù)字。。。。。。");  
            latch.countDown(); 
            executor.shutdown(); 
        } 
    }

軟件測試工具 | 聯(lián)系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd
主站蜘蛛池模板: 久久精品无码一区二区日韩av | 亚洲国产男人本色在线观看的a站 | 国产一级黄色大片 | 成年人色视频 | 亚洲成a人v大片在线观看 | 欧美日本免费观看αv片 | 国产午夜在线观看视频播放 | 欧美精品一区二区三区久久 | 男女羞羞视频网站免费 | 羞羞人成午夜爽爽影院 | 成年色黄大色黄大片 视频 成年日韩免费大片黄在线观看 | 天天色成人网 | 免费看黄色毛片 | 福利影院在线播放 | 国产麻豆精品hdvideoss | 国产成人福利免费视频 | 成人18免费观看的动漫 | 国产一级毛片夜一级毛片 | 日韩理论片在线观看 | 亚洲欧美另类在线 | 日日av| 亚洲丁香色婷婷综合欲色啪 | 国产成人亚洲精品91专区高清 | 国产又黄又免费aaaa视频 | 亚洲有码转帖 | 欧美专区在线播放 | 日日夜夜摸| 天天躁日日躁成人字幕aⅴ 天天在线欧美精品免费看 天天影视涩香欲综合网 | 久久精品国产欧美日韩亚洲 | 国产成人精品aaaa视频一区 | 成人免费福利网站在线看 | 91亚洲导航深夜福利 | 777奇米影视一区二区三区 | 成人影院高清在线观看免费网站 | 亚洲人成77777在线观看网 | 羞羞人成午夜爽爽影院 | 成年人免费在线观看网站 | 国产人成精品午夜在线观看 | 在线免费一级片 | www.日日爱| 欧美男同志videos |