【发布时间】:2014-06-06 13:09:01
【问题描述】:
以前我有一个无限循环的线程,不断从队列中取出元素:
public void start() {
new Thread(task(), "Publish").start();
}
@SuppressWarnings("InfiniteLoopStatement")
private Runnable task() {
return () -> {
while (true) {
someMethodThatTakesFromAQueue();
}
};
}
现在我想使用 ExecutorService,到目前为止我想出的最好的方法是
public void start() {
Executors.newScheduledThreadPool(1)
.scheduleWithFixedDelay(
this::someMethodThatTakesFromAQueue, 0, 1, TimeUnit.MICROSECONDS);
}
但我不喜欢这样一个事实,我必须在执行之间给出一个非零延迟,而实际上我只是希望它永远立即执行,因为队列中的获取将阻塞,直到队列中有作业处理。
还有其他选择吗?
【问题讨论】:
-
你可以使用生产者消费者模型。何时以及何时处理数据,然后您可以使用多线程
标签: java infinite-loop executorservice