首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java:并发更新状态

Java:并发更新状态
EN

Stack Overflow用户
提问于 2015-05-22 12:33:35
回答 1查看 66关注 0票数 1
  • 我有很多任务,它们都有状态。状态被持久化到数据库。目前,我将所有状态保存在一个线程中: executor = Executors.newSingleThreadExecutor();Executor.submit( UpdateStatusTask(taskId,status)); 这是安全的,但会杀死并发性。
  • 另一方面,如果我添加更多的线程,它可能会导致数据损坏--以后的任务状态可能会被更好的线程覆盖。
  • 我看到并行执行状态更新的解决方案,但以这种方式,一个任务的状态更新总是在单个线程上执行。如果将runnables放入队列中,它将确保一致性(在早期状态更新之后执行后续状态更新)。

有任何standart/Apache/Guava等实用工具类来执行这样的任务吗?

EN

回答 1

Stack Overflow用户

发布于 2015-05-23 15:12:16

您应该用同一个线程更新同一任务的状态。

代码语言:javascript
复制
public class TaskStatusUpdater {

    private final int threadCount;
    private final ExecutorService[] executors;

    public TaskStatusUpdater(int threadCount) {
         this.threadCount = threadCount;
         executors = new ExecutorService[threadCount];
         for (int i = 0; i < threadCount; i++) {
             executors[0] = Executors.newSingleThreadExecutor();
         }
    }

    public void submitTask(int taskId, Runnable task) {
         int index = Integer.hashCode(taskId) % threadCount;
         executors[index].submit(task);
     }
 }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30396857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档