每X秒执行一次Java线程
以给定速率调度Java代码的最简单方法是什么 查看执行器。newScheduledThreadPool。它将允许您创建一个每X秒执行一次Java线程,java,Java,以给定速率调度Java代码的最简单方法是什么 查看执行器。newScheduledThreadPool。它将允许您创建一个ScheduledExecutorService,该服务允许您提交可运行的以定期执行。在Java 5+中,具有: 赞成上述方法。在Java 5之前,您曾使用过,并且: 在许多情况下,会有更好的选择。但这是以1000ms+n的间隔(其中n是执行method()所花费的时间量)定期执行method()的最简单方法 当然,您可以输入所需的任何毫秒值,而不是1000。也可以在另一个线
ScheduledExecutorService
,该服务允许您提交可运行的
以定期执行。在Java 5+中,具有:
赞成上述方法。在Java 5之前,您曾使用过,并且:
在许多情况下,会有更好的选择。但这是以1000ms+n的间隔(其中n是执行method()所花费的时间量)定期执行method()的最简单方法
当然,您可以输入所需的任何毫秒值,而不是1000。也可以在另一个线程控制的标志上实现while循环;因此,有一种方法可以停止循环的执行,而不必终止程序。使用以下代码:
Timer timer = new Timer();
timer.schedule( new TimerTask()
{
public void run() {
// do your work
}
}, 0, 60*(1000*1));
差不多了,至少1000人。这取决于线程调度程序决定何时再次开始运行线程。它将是1000+a+n(其中a是调度程序再次激活线程所需的时间),如果我关闭应用程序的主窗口会怎么样?此任务是否仍在运行?是。它仍然在运行,因为它正在打开一个新线程并独立运行。您必须确保关闭计划程序。这可以通过(从Cletus示例中)执行:exec.shutdown();另一方面,shutdown()不会立即关闭。它只是说;它不再接受输入请求。因此,如果线程不停止执行,它可能会“永远”运行。为了避免这种情况,您为关机设置了一个超时-!执行等待终止(3,时间单位秒);-如果关机时间超过3秒,则-exec.shutdownNow();在Java 8中,可以对Runnable实例使用lambda表达式:
ScheduledExecutorService exec=Executors.newSingleThreadScheduledExecutor();exec.scheduleAtFixedRate(()->{//do stuff},1,1,TimeUnit.SECONDS)代码>
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
// do staff
}
}, 0, 5000);
while (true) {
thread.sleep(1000)
method();
}
Timer timer = new Timer();
timer.schedule( new TimerTask()
{
public void run() {
// do your work
}
}, 0, 60*(1000*1));