你如何给一个ScheduledExecutor服务,不断推出新线程的最大时间?

问题描述 投票:1回答:1

采取类似下面的一个的ScheduledThreadPoolExecutor。你如何给执行者本身的时间窗口在那里可以推出新的线程。那段时间窗口之外,应立即停止以固定的速度推出新主题。

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

对于实施例1 <窗口<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.

另外,如果执行者可以给予超时,这也将正常工作。注意我不是说给线程超时,但执行者本身。

我有在主题将时刻跟踪器本身的一个解决方案,但如果有这样做的更天然的方法,我想知道。

java timer executorservice scheduledexecutorservice executor
1个回答
0
投票

有没有“本地”的解决方案。 更好的方法是(只是我的想法抛)

  • 收集并存储所有Future<?>(S)从scheduleAtFixedRate返回
  • 使用作业调度,如石英在特定时间启动作业/或甚至另一个ScheduledExecutor
  • 反应由石英工作推出的“事件”,取消所有存储Future<?>(S)(未关闭执行人)/改变Executor实现对即时的无操作定制版

这有点不切实际。恕我直言,我认为你正在试图做的很漂亮,可以在更“标准”的方式来解决。

© www.soinside.com 2019 - 2024. All rights reserved.