问题标签 [scheduledexecutorservice]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
463 浏览

android - run function every x time in service Android

i am developing an app but i need run a function x minutes, i've tried using

but it does not work. i use this function on a service, when the service is running it does'not call the function.

0 投票
1 回答
1365 浏览

java - Thread.sleep() 和 schedulerExecutorService.scheduleWithFixedDelay 的性能注意事项

我正在尝试编写一个用于轮询的守护线程,它将每“3”秒轮询一次。我见过3种方法。我不知道该去哪一个?我想知道性能注意事项。哪一个可能是一致的并且会占用更小的内存块?

方法1:使用TimerTask(不打算使用这个)

方法 2:使用 ScheduledExecutorService

方法 3:使用 Thread.sleep() ....

如果我归结为这样的代码:

方法#2

为了

方法#3

据我了解,与普通线程相比,线程池是一种重物。我想知道使用这两种方法的优缺点是什么?

提前致谢。

问候, 乙脑

0 投票
2 回答
493 浏览

java - 有界 ScheduledThreadPoolExecutor 的提交方法在释放完整队列后不调用 ThreadFactory

设corePoolSize = 4,四次调用submit(或scheduleAtFixedRate等)方法后,查询填充,getActiveCount()方法返回正确值4,通过future.cancel(true)取消工作任务后getActiveCount( ) = 3,但是我认为新的提交(或 scheduleAtFixedRate 等)t call factory method Thread newThread(Runnable r) of ThreadFactory, before that was caused, and it是错误的,并且 getQueue() 在成功提交后为零,在没有明确创建的情况下也永远不会发生 RejectedExecutionException

稍后在代码中的某处

0 投票
1 回答
360 浏览

java - ScheduledThreadPoolExecutor:如何优先处理任务?

我需要一个 ScheduledThreadPoolExecutor 根据那里的优先级运行任务。如果有 2 个或更多任务等待立即执行,则必须首先调用具有最高优先级的任务。

实际上 ThreadPoolExecutor 有一个解决方案,但 ScheduledThreadPoolExecutor 没有,因为它没有提供带有 BlockingQueue 参数的构造函数。

请参阅:Java Executors:如何设置任务优先级?

0 投票
1 回答
58 浏览

java - 如何每 x 分钟执行每台机器的 url?

我正在从事一个项目,其中我有三个数据中心 -DC1和.DC2DC3

DC1有两台机器(machineA and machineB)DC2我有两台机器(machineC and machineD)DC3我又有两台机器(machineE and machineF)

每个数据中心中的每台机器 URL 都是这样的,它返回字符串作为响应 -

对于 DC1-

对于 DC2-

DC3-

这是我在点击任何特定机器的 url 后通常看到的响应字符串 -

问题陈述:-

现在我需要迭代每个数据中心中的所有机器并执行 URL,然后从中提取data_syncs。这必须每 1 分钟完成一次。

现在如果machineA data_syncs连续 5 分钟始终为零,那么我想打印DC1and machineA。machineB 和其他数据中心也是如此。

我在想的逻辑——

  • 从每个数据中心 ping 每台机器,data_syncs如果值为零,则提取该值,将计数器加一,
  • 然后在一分钟后重试,如果该值仍然为零,则再次将相同的计数器加一。
  • 如果计数器达到 5(因为它是 5 分钟)并且它仍然连续为零,那么我会在我的地图中添加这台机器和数据中心的名称。
  • 但是假设在连续三次尝试中它为零,而在第四次尝试中它变为非零,那么我的计数器将在数据中心中的那台机器上重置为零,并为那台机器再次启动该过程。

下面是我的地图,如果数据中心及其机器满足上述条件,我将在其中放置它们 -

这里的键是数据中心名称,值是满足条件的数据中心的机器列表。

下面是我想出的解决上述问题的代码,但它不像我猜想的那样工作。counter我猜这不是我想要的所有机器都是一样的。

这是我的MachineMetrics课-

这是否可以使用 ScheduledExecutorService 来完成,因为这不是一次性过程?必须反复进行

基本上对于每台机器,如果连续data_syncs一段时间为 0,那么我需要记录该数据中心及其机器。5 minutes

0 投票
1 回答
902 浏览

java - JAVA ScheduledExecutorService - 每天运行一次重复某些作业

我正在编写 J2SE 应用程序,其目的是每天向远程服务器发送一定数量的请求。每天发送的请求数量有限,甚至每小时 - 每天 100K 请求 && 每小时 10K => aprox。每 2.8 秒 1 个请求。

我只写了一个示例程序,它每 15 秒打印一次——重复时我使用了 ScheduledExecutorService 和 ScheduledFuture,我指定了我的可运行,没有启动延迟,并且重复延迟 = 15000,时间单位 = MILLISECONDS。

在我的可运行测试中,我试图模拟在循环中做一些事情(只是简单的 println() 并在这些迭代之间使用 sleep(2800) ) - 因为我处于预定任务中,下一次执行之间有 15 秒,我刚刚意识到我需要 6 次print => 6 * 2800 = 14000,最高可达15000。但是正如我在睡觉时看到的那样,下一次执行应该在15000ms之后发生的整个任务实际上发生在:14000ms + 15000ms之后。我猜这个 sleep(2800) 对它有一些影响。

正如我所说,我需要每天重复发送一次某些请求,发送之间有一些时间延迟 - 但在接下来的 24 小时后不要触及此任务的全面执行。我怎样才能做到这一点?

使用: ScheduledFuture , ScheduledExecutorService , ThreadFactory

如果有人可以在这里提供帮助是我的代码https://db.tt/vznt4PWG,它是一个 Eclipse 项目。

0 投票
1 回答
2911 浏览

android - Android - 试图停止 ScheduledExecutorService

我在活动的创建方法中使用下一个代码-

如您所见,我每 5 秒用它调用一次服务。

我已经像这样在清单中声明了服务-

现在,在我声明了 ScheduledExecutorService 的同一个活动中,我有一个退出按钮。

当按下它时,我试图停止 ScheduledExecutorService ,就像这样 -

甚至

finish() 当然是完成活动。

但问题是 scheduleTaskExecutor 在按下该按钮后不会停止。

任何想法为什么会这样?

感谢您的任何帮助

0 投票
1 回答
199 浏览

java - 如何在星期四晚上 7 点之后使用 ScheduledExecutorsService 运行特定任务?

我正在尝试安排一个工作在每周四晚上 7 点之后随时运行。但到目前为止,使用下面的代码,我可以让它在星期四运行,但不能在晚上 7 点之后随时运行。

我正在使用ScheduledExecutorsService这个。有什么办法可以让它在星期四晚上 7 点之后运行吗?

任何建议都会有很大帮助。我需要使用多线程方式来执行我的任务。在我的tasks中,我将有两个以上的类,因为现在我只有两个类,我正在并行执行它。

0 投票
2 回答
3696 浏览

java - 预定执行器:以固定速率轮询结果,如果超时或结果有效则退出

问题: 我需要每隔 10 秒以固定速率调用一个 dao 方法,然后我需要检查结果是否有效,如果是则退出,否则继续每 10 秒调用一次该方法,直到我得到一个有效的结果或定义超时(比如 2 分钟)结束。

方法: 我想将任务和调度程序逻辑分开,并以这样的方式编写任务,以便具有相似要求的不同类可以使用它。

我能想到的一种方法是定义一个新的轮询任务

用户只需提供task的实现和isValid;

然后我们可以定义一个单独的类,它接受池频率和超时,并创建一个调度执行器并提交这个任务

现在用户可以等到 pollerExecutor.isDone 返回 true 并获取结果。为了以下目的,我不得不使用三个执行器:

  1. 执行器以固定间隔运行任务
  2. 执行者在超时结束时停止一切
  3. 如果在超时之前获得有效结果,则执行程序将停止所有操作。

有人可以建议一个更好的方法吗,对于这样一个微不足道的任务来说这似乎很复杂?

0 投票
1 回答
89 浏览

concurrency - 使用 ScheduledExecutorService 实现不活动超时

我们的系统处理从消息传递系统传递的消息。如果 10 秒后未收到消息,则应引发错误(不活动超时)。

我正在考虑使用ScheduledExecutorService(带 1 个线程)。每次收到消息,我都会取消之前的超时任务并提交一个新的:

在正常情况下,我们处理 ~ 1000 / 秒。这种方法会扩展吗?