Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
每X秒执行一次Java线程_Java - Fatal编程技术网

每X秒执行一次Java线程

每X秒执行一次Java线程,java,Java,以给定速率调度Java代码的最简单方法是什么 查看执行器。newScheduledThreadPool。它将允许您创建一个ScheduledExecutorService,该服务允许您提交可运行的以定期执行。在Java 5+中,具有: 赞成上述方法。在Java 5之前,您曾使用过,并且: 在许多情况下,会有更好的选择。但这是以1000ms+n的间隔(其中n是执行method()所花费的时间量)定期执行method()的最简单方法 当然,您可以输入所需的任何毫秒值,而不是1000。也可以在另一个线

以给定速率调度Java代码的最简单方法是什么

查看执行器。newScheduledThreadPool。它将允许您创建一个
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));