import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
class MyTask1 implements Runnable{
MyTask1(){
new Thread(this).start();
}
public void run(){
System.out.println("Running");
}
}
public class Schedular_1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
ScheduledExecutorService ex = Executors.newScheduledThreadPool(1);
ex.scheduleAtFixedRate(new MyTask1(), 3, 10, TimeUnit.SECONDS);
}
}
scheduleAtFixedRateの最初の実行は、2番目のパラメータで定義した遅延後に期待されます。その後の実行は、3番目のパラメータ、つまり10秒ごとに定義する必要があります。しかし、実際には(MyTask1)は、mainメソッドを呼び出すとすぐに実行されています。 3秒後に2回目に実行され、10秒ごとに定期的に実行されます。scheduleAtFixedRateはタスクを即座に実行し、定義された遅延後に実行する必要があります。
ここではうまく動作するこのバージョンの別のバージョンがあります(link)。
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
class MyTask1 implements Runnable{
MyTask1(){
new Thread(this).start();
}
public void run(){
System.out.println("Running");
}
}
public class Schedular_1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
ScheduledExecutorService ex = Executors.newScheduledThreadPool(1);
ex.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
System.out.println("Testing...");
}
}, 3, 10, TimeUnit.SECONDS);
}
}
これらの2つの違いの違いは何ですか?それはなぜ異常に行動するのですか?