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

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

まんま

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

public class C2008092900 implements Runnable {
    int number;
    long start;
    public C2008092900(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.scheduleWithFixedDelay(new C2008092900(i,start),1000,10000,TimeUnit.MILLISECONDS);
        }
    }
}

で、

Task0 Send (10)
Task1 Send (76)
Task2 Send (96)
Task0 Start(1052)
Task0 End  (2080)
Task1 Start(2100)
Task1 End  (3130)
Task2 Start(3150)
Task2 End  (4175)
Task0 Start(12104)
Task0 End  (13113)
Task1 Start(13153)
Task1 End  (14163)
Task2 Start(14193)
Task2 End  (15203)
Task0 Start(23123)
Task0 End  (24133)
Task1 Start(24173)
Task1 End  (25183)
Task2 Start(25213)
Task2 End  (26223)
Task0 Start(34143)
Task0 End  (35153)
Task1 Start(35193)
Task1 End  (36203)
Task2 Start(36233)
Task2 End  (37243)
 ...