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

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

  在iteye上看到的一道多線程的題目,參考了一下網(wǎng)友的實(shí)現(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
主站蜘蛛池模板: 国产综合欧美 | 在线不卡国产 | 在线观看日韩视频 | 玖玖精品| 国产三级a三级三级三级 | www.免费黄色| 欧美一区二区三区免费观看视频 | 国产丝袜久久 | 日本在线亚州精品视频在线 | 极品福利在线 | 日韩中文字幕精品一区在线 | 亚洲一区免费看 | 日本免费一区二区三区在线看 | 欧美日韩黄色大片 | 国产福利影院在线观看 | 色图欧美 | 手机看片日韩日韩国产在线看 | 久久99国产这里有精品视 | 一级黄色毛片视频 | 一级一级一级毛片免费毛片 | 波多久久夜色精品国产 | 大陆黄色网 | 伊人天天 | 免费黄色a | 亚洲高清日韩精品第一区 | 青草视频免费观看 | 亚洲成a人片在线v观看 | 精品国产一区二区三区不卡 | 日本欧美高清视频 | 加勒比一本大道香蕉在线视频 | 日韩欧美视频一区 | 日本伊人精品一区二区三区 | 91极品蜜桃臀在线播放 | 日韩激情视频在线观看 | 黄污视频网站 | 精品久久久久久中文字幕202o | 国产旗袍丝袜在线观看视频 | 污污视频网站免费 | 日韩欧美大片 | 老司机69精品成免费视频 | 欧美成人a大片 |