我发现自己过多地考虑解决并发问题,这对我来说表明可能有一个抽象来完成我应该使用的我想要的东西。
这里是基本前提:
- 我有一个可以处理的数据队列
- 线程可以进入并向队列中添加工作
- 开始和完成一组要处理的项目会产生很高的开销
- 一次只能有一个线程处理数据
我认为以下 API 会很好:
- 线程可以向队列中添加工作
- 如果当前未处理队列中的数据,则调用后台任务开始处理
- 后台任务继续在队列上工作,直到它为空,即使其他线程丢弃额外的项目以在队列中工作
困难的部分是,如果线程在工作线程即将完成的同时放弃一项工作,则确保数据不会留在未处理的队列中。
我会假设存在一个抽象来解决这个问题。有人知道吗?
编辑:
更具体地说,我说的是增量搜索索引器,添加到队列中的数据是要处理的额外文档。当我谈论开始和停止一组工作时,我指的是建立缓存上下文和提交更新的索引。我们不能一直运行一个工作线程,因为如果我们从不提交,新索引就永远不会提交,如果我们不定期关闭缓存上下文,它可能会变得太大。
目标是在大多数情况下,一次只处理几件工作,但在高负载期间,我们不会浪费太多时间做太多提交。
最佳答案
Java 在 http://download.oracle.com/javase/1,5.0/docs/api/java/util/concurrent/package-summary.html 有很多并发抽象
关于工作队列的 Java 并发抽象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8187774/