您如何为 ScheduledExecutor 服务提供最长时间以继续启动新线程?
How do you give an ScheduledExecutor service a maximum time to keep on launching new threads?
采用如下所示的 ScheduledThreadPoolExecutor。你如何给执行者自己一个时间window,它可以启动新线程。在那段时间之外 window 它应该停止以固定速率启动新线程。
executor = new ScheduledThreadPoolExecutor(1);
executor.scheduleAtFixedRate(new Runnable(){}, 0, 1, TimeUnit.DAYS);
例如 1 < window < 3s:
if executor has run for <= 1s stop launching thread
if executor has run for > 1s and < 3s. Start and keep launching thread
if executor has run for < 3s stop launching thread.
或者,如果可以给执行者一个暂停时间,那也行。注意我不是说给线程超时,而是给执行者本身。
我有一个在线程本身中添加时间跟踪器的解决方案,但我想知道是否有更多本机方法可以这样做。
没有"native"解决方案。
更好的方法是(只是抛出我的想法)
- 收集并存储从
scheduleAtFixedRate
返回的所有 Future<?>
(s)
- 使用 Quartz 等作业调度程序在特定时间/甚至另一个
ScheduledExecutor
开始作业
- 对 Quartz 作业启动的 "events" 做出反应,取消所有存储的
Future<?>
(s)(不关闭执行程序)/更改 Executor
实现 on-the-为无操作自定义版本飞行
这有点不切实际。恕我直言,我认为您正在尝试做一些聪明的事情,可以通过更多 "standard" 方式解决。
采用如下所示的 ScheduledThreadPoolExecutor。你如何给执行者自己一个时间window,它可以启动新线程。在那段时间之外 window 它应该停止以固定速率启动新线程。
executor = new ScheduledThreadPoolExecutor(1);
executor.scheduleAtFixedRate(new Runnable(){}, 0, 1, TimeUnit.DAYS);
例如 1 < window < 3s:
if executor has run for <= 1s stop launching thread
if executor has run for > 1s and < 3s. Start and keep launching thread
if executor has run for < 3s stop launching thread.
或者,如果可以给执行者一个暂停时间,那也行。注意我不是说给线程超时,而是给执行者本身。
我有一个在线程本身中添加时间跟踪器的解决方案,但我想知道是否有更多本机方法可以这样做。
没有"native"解决方案。
更好的方法是(只是抛出我的想法)
- 收集并存储从
scheduleAtFixedRate
返回的所有 - 使用 Quartz 等作业调度程序在特定时间/甚至另一个
ScheduledExecutor
开始作业
- 对 Quartz 作业启动的 "events" 做出反应,取消所有存储的
Future<?>
(s)(不关闭执行程序)/更改Executor
实现 on-the-为无操作自定义版本飞行
Future<?>
(s)
这有点不切实际。恕我直言,我认为您正在尝试做一些聪明的事情,可以通过更多 "standard" 方式解决。