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 预计在我们在第二个参数中定义的延迟之后首次运行。随后的执行必须由第三个参数定义,即每 10 秒一次。但实际上,一旦我调用 main 方法,它(MyTask1)就会立即运行。 3 秒后,它会执行第二次,并且每 10 秒后,它会定期运行。
我在这里找到了另一个可以正常工作的版本( 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);
}
}
这两个版本之间有什么区别。为什么它的行为异常?
最佳答案
您不需要在 MyTask1
中启动 Thread
。
MyTask1
的正确版本将是:
class MyTask1 implements Runnable{
MyTask1(){
}
public void run(){
System.out.println("Running");
}
}
关于java - ScheduleAtFixedRate 立即执行任务,应在定义的延迟后运行。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40256804/