我在Java中实现了一个“可折叠队列”,即由ExecutorService使用的LinkedBlockingQueue。其思想是每个任务都有一个唯一的ID,如果该ID在队列中,而另一个任务通过相同的ID提交,则不会将其添加到队列中。Java代码如下:
public final class FoldablePricingQueue extends LinkedBlockingQueue<Runnable> {
@Override
public boolean offer(final Runnable runnable) {
if (contains(runnable)) {
return true; // rejected, but true not to throw an exception
} else {
return super.offer(runnable);
}
}
}
线程必须预先启动,但这只是一个小细节。我有一个实现Runnable的抽象类,它接受一个唯一的id...这是传递进来的那个。
我想使用Scala和Akka(Actors)实现相同的逻辑。我需要访问邮箱,并且我认为我需要重写!方法并检查邮箱中的事件...有人以前做过这个吗?