gpt4 book ai didi

java - ScheduleAtFixedRate 立即执行任务,应在定义的延迟后运行。

转载 作者:行者123 更新时间:2023-12-02 03:16:12 28 4
gpt4 key购买 nike

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 中启动 ThreadMyTask1 的正确版本将是:

class MyTask1 implements Runnable{
MyTask1(){
}
public void run(){
System.out.println("Running");
}
}

关于java - ScheduleAtFixedRate 立即执行任务,应在定义的延迟后运行。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40256804/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com