【发布时间】:2016-02-01 10:45:09
【问题描述】:
我有一个执行器服务,它定期执行一堆任务。它们在启动时被初始化并经常运行,到目前为止一切顺利。
我现在想添加功能以根据事件快速开始执行这些任务。
我找到了 decorateTask 方法,它允许我存储我安排的任务。但是,我不确定如何让它们运行?
我有覆盖 RunnableScheduledFuture 中的 Delayed 方法以使其在预定义事件上返回 0 的想法,但我也不确定这是否可行,如果我这样做,执行程序会如何表现?
另一个想法是收集所有任务,然后将它们提交以直接在事件上执行。也不确定它会如何表现。
我不能只对它们调用 run,因为它们将在同一个线程中运行。
我希望这一切都有意义。让我知道是否有任何不清楚的地方。
public class EventBasedExecutor extends ScheduledThreadPoolExecutor implements EventBasedExecutorService {
private static final Logger log = Logger.getLogger(EventBasedExecutor.class);
private List<RunnableScheduledFuture<?>> workers = new ArrayList<>();
public EventBasedExecutor(int corePoolSize, ThreadFactory threadFactory) {
super(corePoolSize, threadFactory);
}
@Override
protected <V> RunnableScheduledFuture<V> decorateTask(Runnable runnable, RunnableScheduledFuture<V> task) {
workers.add(task);
return super.decorateTask(runnable, task);
}
@Override
public void executeEarly() {
// do something here to start the executors work
}
【问题讨论】:
标签: java multithreading threadpool java.util.concurrent scheduledexecutorservice