工作队列的 Java 并发抽象

标签 java multithreading concurrency

我发现自己过多地考虑解决并发问题,这对我来说表明可能有一个抽象来完成我应该使用的我想要的东西。

这里是基本前提:

  • 我有一个可以处理的数据队列
  • 线程可以进入并向队列中添加工作
  • 开始和完成一组要处理的项目会产生很高的开销
  • 一次只能有一个线程处理数据

我认为以下 API 会很好:

  • 线程可以向队列中添加工作
  • 如果当前未处理队列中的数据,则调用后台任务开始处理
  • 后台任务继续在队列上工作,直到它为空,即使其他线程丢弃额外的项目以在队列中工作

困难的部分是,如果线程在工作线程即将完成的同时放弃一项工作,则确保数据不会留在未处理的队列中。

我会假设存在一个抽象来解决这个问题。有人知道吗?


编辑:

更具体地说,我说的是增量搜索索引器,添加到队列中的数据是要处理的额外文档。当我谈论开始和停止一组工作时,我指的是建立缓存上下文和提交更新的索引。我们不能一直运行一个工作线程,因为如果我们从不提交,新索引就永远不会提交,如果我们不定期关闭缓存上下文,它可能会变得太大。

目标是在大多数情况下,一次只处理几件工作,但在高负载期间,我们不会浪费太多时间做太多提交。

最佳答案

关于工作队列的 Java 并发抽象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8187774/

相关文章:

java - 如何将我自己的 .class 文件导入到 RingoJS 应用程序中?

java - 为所有 404 响应创建 servlet 过滤器

java - 使用 AsyncRestTemplate 多次制作 API 并等待所有完成

python - 为什么这个 Dekker 算法实现有效?

java - ComputeIfAbsent 错误的 map 大小

java - 如何更改 eclipse 中的目标应用程序引擎帐户以部署新应用程序?

java - 如何在 IE 中查找框架内的元素?

IOS静态调试符号含义

python - 在Elasticsearch文档线程中更新数组是否安全?

c - 当其他线程不执行时运行多个线程?