如何为ScheduledExecutor服务提供最大的时间来继续启动新线程?

时间:2019-02-09 22:51:09

标签: java timer executorservice scheduledexecutorservice executor

像下面那样使用ScheduledThreadPoolExecutor。您如何给执行程序本身一个时间窗口,以便它可以启动新线程。在该时间段之外,它应停止以固定速率启动新线程。

angular.json

例如1

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

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

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

1 个答案:

答案 0 :(得分:0)

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

  • 收集并存储Future<?>返回的所有scheduleAtFixedRate
  • 使用作业调度程序(例如Quartz)在特定时间甚至其他ScheduledExecutor上开始作业
  • 对Quartz作业启动的“事件”作出反应,取消所有存储的Future<?>(不关闭执行程序)/即时更改Executor的实现-op自定义版本

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