如何在将第一个项放入java ExecutorService线程队列中以及何时删除最后一个项时运行任意代码?

时间:2011-08-23 17:03:29

标签: java multithreading synchronization

我有一个执行者(通过Executors.newFixedThreadPool(int)获得)。每当a)队列为空并且项目被插入队列时,我想运行一些任意代码,并且b)队列非空并且队列中的最后一项被删除。 a)和b)都应该在满足各自条件时始终运行,例如。如果队列被清空并多次填充,则a)和b)将多次运行。

所有这些对于执行者的用户来说应该是不可见的,这意味着代码应该在某种实现ExecutorService的包装器中。如果我愿意,我可以在将newFixedThreadPool()的结果返回给用户之前将其包装起来。如有必要,我也可以完全实现自己的ExecutorServicee。

我希望绝对确定a)和b)在跨多个线程的同步方面表现正常。我不清楚最好的方法。

建议?

1 个答案:

答案 0 :(得分:1)

首先,听起来你想要的只是装饰执行器使用的BlockingQueue实现,这样当调用add(),offer()等并且队列isEmpty()时,你会执行a),当remove(),take()等被调用时,导致队列为isEmpty(),你做b)。你甚至可能在某处找到这样的队列实现。