<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 閱讀(427) 評論(0)  編輯  收藏 所屬分類: JavaMultithread
    主站蜘蛛池模板: 99国产精品免费视频观看| 免费日本一区二区| 免费无码AV电影在线观看| 亚洲欧洲精品久久| 最近中文字幕完整免费视频ww| 亚洲av无码乱码国产精品| 日本免费高清视频| 911精品国产亚洲日本美国韩国| 最近中文字幕大全免费视频| 亚洲欧洲日产国码二区首页| 国国内清清草原免费视频99| 亚洲精品国产首次亮相| 免费人成年轻人电影| 精品免费久久久久国产一区 | 精品久久久久国产免费| 午夜在线a亚洲v天堂网2019 | 久久久久亚洲精品中文字幕| 久久最新免费视频| 亚洲一区二区三区日本久久九| 国产精品成人免费福利| 亚洲爆乳无码专区www| 亚洲精品无码专区2| 免费毛片a线观看| 亚洲免费福利在线视频| 国产免费久久精品| 在线观看肉片AV网站免费| 亚洲字幕在线观看| 凹凸精品视频分类国产品免费| 你懂的免费在线观看| 亚洲国产成人精品久久| 免费在线观看视频a| 无码av免费网站| 亚洲AV无码一区二区乱子仑| 亚洲熟妇无码另类久久久| 国产黄色免费网站| free哆拍拍免费永久视频| 亚洲美女精品视频| 亚洲精品无码久久久久AV麻豆| 最近中文字幕国语免费完整| 国产午夜亚洲精品不卡| 亚洲视频一区二区在线观看|