gpt4 book ai didi

java - 在 Java 8 中生成具有无限循环的线程的最佳方法是什么?

转载 作者:行者123 更新时间:2023-11-29 04:52:02 26 4
gpt4 key购买 nike

我有一个方法需要每 n 秒调用一次。在过去的 Java 时代,我会做这样的事情:

Runnable task = () -> {

while (!updater.isInterrupted()) {
//some Task
} catch (InterruptedException e) {}
}
};
Thread updater = new Thread(task);
updater.start();

但这显然是个坏主意。如果我想停止线程,我需要调用 updater.interrupt() 并依赖异常处理,这实际上不是为这个东西做的。

所以我想有一些奇特的"new"Java8 方法可以做到这一点。我已经看到了这个:

public class TestSchedularService {
long sleep = 500;

@Test
public void testLoop2() throws Exception {
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
ScheduledFuture future = executor.scheduleWithFixedDelay(new PollingService(), 0, sleep,TimeUnit.MILLISECONDS);
Thread.sleep(2 * sleep);
future.cancel(false);
executor.shutdown();
}
}

class PollingService implements Runnable {
private int count = 0;
public void run() {
System.out.println("iteration :" + (count++));
}
}

但它似乎在每次调用时都创建了一个 PollingService 实例,这似乎很糟糕。那么每 n 秒调用一次方法的最有效和“最新”的方法是什么?

最佳答案

使用 ScheduledExecutorService 是正确的方法。它不会创建 PollingService 的新实例,您创建它并且执行程序一直在同一实例上调用 run 直到您取消 Future.

关于java - 在 Java 8 中生成具有无限循环的线程的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35105597/

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