【Java】【非同期】 ThreadPoolExecutor ~スレッドプール ~ [2]

はじめに

http://blogs.yahoo.co.jp/dk521123/36245450.html
の続き。「[1] new ThreadPoolExecutor(引数)で作成」をみていく。

サンプル

SampleThread.java

import java.text.SimpleDateFormat;

public class SampleThread implements Runnable {
   private SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
         "HH:mm:ss SSS");
   @Override
   public void run() {
      System.out.println("Time       : "+ simpleDateFormat.format(System.currentTimeMillis()));
   }
}

Main.java

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.RejectedExecutionHandler;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class Main {
   public static void main(String[] args) {
      // プールしておく最小のスレッド数
      int corePoolSize = 2;
      // 最大スレッド数
      int maximumPoolSize = 2;
      // 仕事がなかったと判断されるまでの待ち時間
      long keepAliveTime = 500;
      // keepAliveTimeの時間単位
      TimeUnit unit = TimeUnit.SECONDS;
      // タスクを登録するためのキュー
      BlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<Runnable>();
      // ポリシー
      RejectedExecutionHandler handler = new ThreadPoolExecutor.CallerRunsPolicy();
      ThreadPoolExecutor threadPool = new ThreadPoolExecutor(corePoolSize,
            maximumPoolSize, keepAliveTime, unit, workQueue, handler);

      try {
         // shutdown()を呼ぶ前であれば、タスクを後から追加することもできる  
         for (int i = 0; i < 10; i++) {
            Thread.sleep(1000);
            threadPool.execute(new SampleThread());
         }
      } catch (InterruptedException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      } finally {
         // 必ずshutdownを実行  
         System.out.println("ShutDown実行。");
         threadPool.shutdown();
      }
      System.out.println("処理終了");
   }
}

出力結果

Time       : 23:48:56 335
Time       : 23:48:57 336
Time       : 23:48:58 335
Time       : 23:48:59 335
Time       : 23:49:00 335
Time       : 23:49:01 336
Time       : 23:49:02 336
Time       : 23:49:03 336
Time       : 23:49:04 336
ShutDown実行。
Time       : 23:49:05 337
処理終了


関連記事

デザインパターン】【非同期】Worker Thread パターン

http://blogs.yahoo.co.jp/dk521123/32918314.html

ThreadPoolExecutor ~スレッドプール ~ [1]

http://blogs.yahoo.co.jp/dk521123/36245450.html