JDK5.0 新機能:java.util.concurrentパッケージ、newCachedThreadPool()

「11.3. スレッドプール」

まんま

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class C2008092600 implements Runnable {
    private int number;
    public C2008092600(int number){
        this.number = number;
    }
    public void run() {
        System.out.println("Task" + number + " Start");
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("Task" + number + " End");
    }

    public static void main(String[] args) {
        ExecutorService ex = Executors.newCachedThreadPool();
        Thread.currentThread().getThreadGroup().list();
        System.out.println("Sending Tasks....");
        for (int i = 0; i < 3; i++) {
            ex.execute(new C2008092600(i));
            Thread.currentThread().getThreadGroup().list();
            try {
                Thread.sleep(600);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        ex.shutdown();
    }
}

で、

java.lang.ThreadGroup[name=main,maxpri=10]
    Thread[main,5,main]
Sending Tasks....
java.lang.ThreadGroup[name=main,maxpri=10]
    Thread[main,5,main]
    Thread[pool-1-thread-1,5,main]
Task0 Start
java.lang.ThreadGroup[name=main,maxpri=10]
    Thread[main,5,main]
    Thread[pool-1-thread-1,5,main]
    Thread[pool-1-thread-2,5,main]
Task1 Start
Task0 End
java.lang.ThreadGroup[name=main,maxpri=10]
    Thread[main,5,main]
    Thread[pool-1-thread-1,5,main]
    Thread[pool-1-thread-2,5,main]
Task2 Start
Task1 End
Task2 End