您如何为 ScheduledExecutor 服务提供持续启动新线程的最长时间



采用如下所示的 ScheduledThreadPoolExecutor。如何为执行程序本身提供一个可以启动新线程的时间窗口。在该时间窗口之外,它应该停止以固定速率启动新线程。

executor = new ScheduledThreadPoolExecutor(1);
executor.scheduleAtFixedRate(new Runnable(){}, 0, 1, TimeUnit.DAYS);

例如,1 <窗口>

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.

或者,如果可以给执行者一个超时,那也将起作用。请注意,我不是说给线程超时,而是给执行器本身。

我有一种解决方案可以在线程本身中添加时间跟踪器,但我想知道是否有更多本机方法可以这样做。

没有"本机"解决方案。
更好的方法是(只是抛出我的想法(

  • 收集和存储从scheduleAtFixedRate退回的所有Future<?>
  • 使用诸如Quartz之类的作业调度程序在特定时间/甚至另一个ScheduledExecutor启动作业
  • 对 Quartz 作业启动的"事件"做出反应,取消所有存储的Future<?>(不关闭执行器(/即时更改Executor实现以获得无操作自定义版本

这有点不切实际。恕我直言,我认为您正在尝试做一些聪明的事情,可以用更"标准"的方式解决。

相关内容

  • 没有找到相关文章

最新更新