gpt4 book ai didi

java - 使用计时器调度 Java 线程

转载 作者:行者123 更新时间:2023-11-30 06:36:02 25 4
gpt4 key购买 nike

我有一个 Runnable 类,它需要在自上次运行后设定的时间间隔后运行。示例:ProcessThread 在完成后每 2 分钟运行一次。因此,如果我在 1:00 启动 ProcessThread,它需要 5 分钟(在 1:05 结束),那么下一次它应该在 1:07 运行。如果那个需要 3 分钟运行,(在 1:10 结束),下一个在 1:12 开始)等等。

我不能将它设置为 2 分钟的固定速率,因为这样会触发第二个线程,而第一个线程尚未完成。

所以,这是我当前的代码,但我的方式是,它一直在创建线程并且永远不会结束它们......所以最终我的内存力越来越大:

主要内容:

public class MyMain extends Thread{
public static void main(String[] args) {

ExecuteThread execute = new ExecuteThread();
execute.start();
}
}

ExecuteThread(我把try-catch拿出来了):

public void run() {

MyProcessThread myProcess = new MyProcessThread();
ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();

myProcess.start();
while(myProcess.isAlive()){
sleep(10000);
}

scheduler.schedule(this,myProcess.getDelaySeconds(),TimeUnit.SECONDS);

}

在我让调度程序在 MyProcessThread 中运行之前,结果是一样的。这看起来是正确的方向,但仍然有问题。

最佳答案

你可以做到

scheduledExecutorService = Executors.newScheduledThreadPool(1);
scheduledExecutorService.scheduleWithFixedDelay(command, 0, 2, TimeUnit.MINUTES);

这将创建一个执行器,它将在上一个 command 运行完成后 2 分钟运行 command。查看文档 here .

这是它的一个片段。

Creates and executes a periodic action that becomes enabled first after the given initial delay, and subsequently with the given delay between the termination of one execution and the commencement of the next. If any execution of the task encounters an exception, subsequent executions are suppressed. Otherwise, the task will only terminate via cancellation or termination of the executor.

考虑最后一句关于命令是否有任何异常!

关于java - 使用计时器调度 Java 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5245553/

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