【问题标题】:Architecture: multithreaded workers use synchronized processing method架构:多线程worker使用同步处理方式
【发布时间】:2014-05-19 10:46:36
【问题描述】:

我有一个处理类和一个计算类。

处理对象将以下参数传递给计算对象中的方法:

  • 问题(此处类型无关紧要)
  • ExecutorService 对象
  • 自我参考

在计算对象中,使用ExecutorService 在多个线程中解决问题。 每当获得结果时,都会调用处理对象的同步方法。

这个架构好吗?

【问题讨论】:

    标签: java multithreading synchronized


    【解决方案1】:

    与其调用同步方法,不如将结果传递给作为处理对象成员的java.util.concurrent.BlockingQueue

    然后让处理对象从队列中删除结果并按照自己的节奏处理它们。

    也请查看java.util.concurrent javadoc。

    【讨论】:

    • 好吧,我应该说的是:结果是 java.sql.ResultSet 类型的。所以我必须在使用后关闭结果,我猜在使用并发提示时这很难。
    • 那你需要解释一下在同步方法中发生了什么。如果以同步方法处理 ResultSet,可能会遇到数据库锁定问题。
    • 我正在使用 .next() 方法获取结果。所有表都设置为只读,因此无法对数据库进行任何修改。
    • 要么在 pojo 中累积“结果”并将 pojo 排队(可能是一个集合对象),或者如果可以以交错方式处理单个结果,则将它们排队。
    • 据我了解,ResultSet 只是数据库的一个游标。所以我必须通过 ResultSet 并将所有行保存在一个单独的对象中,对吗?这真的比调用同步方法更好吗?什么情况下会出现数据库锁定问题?我想说的是,如果数据库真的被锁定了,线程只需要等到它再次打开。
    猜你喜欢
    • 2015-04-15
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多