我有一个执行者(通过Executors.newFixedThreadPool(int)
获得)。每当a)队列为空并且项目被插入队列时,我想运行一些任意代码,并且b)队列非空并且队列中的最后一项被删除。 a)和b)都应该在满足各自条件时始终运行,例如。如果队列被清空并多次填充,则a)和b)将多次运行。
所有这些对于执行者的用户来说应该是不可见的,这意味着代码应该在某种实现ExecutorService的包装器中。如果我愿意,我可以在将newFixedThreadPool()
的结果返回给用户之前将其包装起来。如有必要,我也可以完全实现自己的ExecutorServicee。
我希望绝对确定a)和b)在跨多个线程的同步方面表现正常。我不清楚最好的方法。
建议?
答案 0 :(得分:1)
首先,听起来你想要的只是装饰执行器使用的BlockingQueue实现,这样当调用add(),offer()等并且队列isEmpty()时,你会执行a),当remove(),take()等被调用时,导致队列为isEmpty(),你做b)。你甚至可能在某处找到这样的队列实现。