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

「12.1. スケジューリング」

まんま

import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

public class C2008092700 implements Runnable {
    int number;
    long start;
    public C2008092700(int number, long start) {
        this.number = number;
        this.start = start;
    }
    public void run() {
        System.out.print("Task" + number + " Start");
        System.out.println("(" + (System.currentTimeMillis() - start) + ")");
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.print("Task" + number + " End  ");
        System.out.println("(" + (System.currentTimeMillis() - start) + ")");
    }
    
    public static void main(String[] args) {
        ScheduledExecutorService ex = Executors.newSingleThreadScheduledExecutor();
        long start = System.currentTimeMillis();
        for (int i=0; i<3; i++) {
            System.out.print("Task"+i+" Send ");
            System.out.println("(" + (System.currentTimeMillis() - start) + ")");
            ex.schedule(new C2008092700(i,start),1000,TimeUnit.MILLISECONDS);
        }
    }
}

で、

Task0 Send (10)
Task1 Send (76)
Task2 Send (89)
Task0 Start(1061)
Task0 End  (2089)
Task1 Start(2102)
Task1 End  (3119)
Task2 Start(3131)
Task2 End  (4150)
 ...