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