gpt4 book ai didi

java - 预定的执行者服务。如何在两个单独的服务中经过一段时间后运行两个任务

转载 作者:太空宇宙 更新时间:2023-11-04 12:43:52 25 4
gpt4 key购买 nike

我正在尝试为我的应用程序实现连续运行的后台任务。为此,我使用了 ScheduledExecutorService 类。我有 2 个服务 Service AService B 都有一个在一定时间间隔后一直运行的任务。为此,我在 Service AService B

中使用了以下内容

这是两个服务类中通用的代码。

Runnable postNotificationRunnable = new Runnable() {
@Override
public void run() {
// statements here}
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);
scheduledExecutorService.scheduleAtFixedRate(postNotificationRunnable, 0, 1000, TimeUnit.SECONDS);

现在的问题是,当我运行应用程序时,两个服务都会启动,但只有 Service A 的 ScheduledExecutorService 运行,其他服务不运行。我做错了什么?P.S 我是第一次使用 ScheduledExecutorService。

最佳答案

ScheduledExecutorService 将等待您的任务完成,前提是任务花费的时间超过您指定的速率(在您的情况下为 1000 秒)。看看各自的Javadoc :

[...] If any execution of this task takes longer than its period, then subsequent executions may start late, but will not concurrently execute.

由于您的服务似乎表现得像守护进程(因此保持运行直到应用程序关闭),您可以这样做:

ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
ExecutorService pool = Executors.newCachedThreadPool();

scheduler.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
pool.execute(postNotificationRunnable);
}
}, 0L, 1000L, TimeUnit.SECONDS);

只需将服务的实际执行委托(delegate)给一个单独的,该池不会影响调度程序

关于java - 预定的执行者服务。如何在两个单独的服务中经过一段时间后运行两个任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36542675/

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