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

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

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

    少年阿賓

    那些青春的歲月

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks

     1.CachedThreadPool

        CachedThreadPool首先會按照需要創建足夠多的線程來執行任務(Task)。隨著程序執行的過程,有的線程執行完了任務,可以被重新循環使用時,才不再創建新的線程來執行任務。我們采用《Thinking In Java》中的例子來分析。

        首先,任務定義如下(實現了Runnable接口,并且復寫了run方法):

    package net.jerryblog.concurrent;
    public class LiftOff implements Runnable{
        protected int countDown = 10; //Default
        private static int taskCount = 0;
        private final int id = taskCount++; 
        public LiftOff() {}
        public LiftOff(int countDown) {
            this.countDown = countDown;
        }
        public String status() {
            return "#" + id + "(" +
                (countDown > 0 ? countDown : "LiftOff!") + ") ";
        }
        @Override
        public void run() {
            while(countDown-- > 0) {
                System.out.print(status());
                Thread.yield();
            }
            
        }   
    }

    采用CachedThreadPool方式執行編寫的客戶端程序如下: 


    package net.jerryblog.concurrent;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    public class CachedThreadPool {
        public static void main(String[] args) {
            ExecutorService exec = Executors.newCachedThreadPool();
            for(int i = 0; i < 10; i++) {
                exec.execute(new LiftOff());
            }
            exec.shutdown();    
        }
    }

    上面的程序中,有10個任務,采用CachedThreadPool模式,exec沒遇到一個LiftOff的對象(Task),就會創建一個線程來處理任務。現在假設遇到到第4個任務時,之前用于處理第一個任務的線程已經執行完成任務了,那么不會創建新的線程來處理任務,而是使用之前處理第一個任務的線程來處理這第4個任務。接著如果遇到第5個任務時,前面那些任務都還沒有執行完,那么就會又新創建線程來執行第5個任務。否則,使用之前執行完任務的線程來處理新的任務。

    2.FixedThreadPool

         FixedThreadPool模式會使用一個優先固定數目的線程來處理若干數目的任務。規定數目的線程處理所有任務,一旦有線程處理完了任務就會被用來處理新的任務(如果有的話)。這種模式與上面的CachedThreadPool是不同的,CachedThreadPool模式下處理一定數量的任務的線程數目是不確定的。而FixedThreadPool模式下最多 的線程數目是一定的。

        采用FixedThreadPool模式編寫客戶端程序如下:


    package net.jerryblog.concurrent;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    public class FixedThreadPool {
        public static void main(String[] args) {
            //三個線程來執行五個任務
            ExecutorService exec = Executors.newFixedThreadPool(3);   
            for(int i = 0; i < 5; i++) {
                exec.execute(new LiftOff());
            }
            exec.shutdown();
        }
    }

    3.SingleThreadExecutor模式

        SingleThreadExecutor模式只會創建一個線程。它和FixedThreadPool比較類似,不過線程數是一個。如果多個任務被提交給SingleThreadExecutor的話,那么這些任務會被保存在一個隊列中,并且會按照任務提交的順序,一個先執行完成再執行另外一個線程。

        SingleThreadExecutor模式可以保證只有一個任務會被執行。這種特點可以被用來處理共享資源的問題而不需要考慮同步的問題。

        SingleThreadExecutor模式編寫的客戶端程序如下: 



    package net.jerryblog.concurrent;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    public class SingleThreadExecutor {
        public static void main(String[] args) {
            ExecutorService exec = Executors.newSingleThreadExecutor();
            for (int i = 0; i < 2; i++) {
                exec.execute(new LiftOff());
            }
        }
    }

    這種模式下執行的結果如下:
    #0(9) #0(8) #0(7) #0(6) #0(5) #0(4) #0(3) #0(2) #0(1) #0(LiftOff!)
    #1(9) #1(8) #1(7) #1(6) #1(5) #1(4) #1(3) #1(2) #1(1) #1(LiftOff!)
    第一個任務執行完了之后才開始執行第二個任務。   




    posted on 2012-12-19 12:39 abin 閱讀(428) 評論(0)  編輯  收藏 所屬分類: JavaMultithread
    主站蜘蛛池模板: 久久久久久曰本AV免费免费| 巨胸喷奶水视频www免费视频| 最近2018中文字幕免费视频| 亚洲精品成人网站在线观看| 国产免费区在线观看十分钟| 亚洲色欲色欲www在线丝| 中文毛片无遮挡高清免费| 亚洲国产精品一区二区第一页 | 亚洲综合av一区二区三区不卡 | 免费无码中文字幕A级毛片| 亚洲成在人天堂一区二区| 91精品啪在线观看国产线免费| 日韩精品一区二区亚洲AV观看 | 亚洲国产成人九九综合| 西西大胆无码视频免费| 亚洲国产精品成人午夜在线观看 | 亚洲AV无码AV男人的天堂| 无码av免费一区二区三区试看| 亚洲视频在线观看视频| 免免费国产AAAAA片| 亚洲国产日韩a在线播放| 亚洲成?v人片天堂网无码| 在线观看免费无码视频| 亚洲综合免费视频| 在线免费观看毛片网站| 免费无码国产在线观国内自拍中文字幕 | 亚洲av无码不卡私人影院| 91免费福利视频| 亚洲天堂一区二区三区| 免费永久国产在线视频| 在线看片免费人成视频播| 亚洲午夜精品在线| 国产一级淫片视频免费看| 热久久这里是精品6免费观看 | 亚洲人成无码网站在线观看 | 亚洲国产aⅴ综合网| 日本免费高清视频| 亚洲av无码成人影院一区| 亚洲精品午夜无码专区| 国内精品乱码卡1卡2卡3免费| 午夜免费国产体验区免费的|