您如何为 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" 方式解决。