【发布时间】:2014-05-27 15:42:46
【问题描述】:
我有两种方法,foo() 和 bar()。将有多个线程调用这些方法,可能同时调用。如果foo() 和bar() 同时运行可能会很麻烦,因为它们内部逻辑的交错可能会使系统处于不一致的状态。但是,多个线程能够同时调用foo() 并且多个线程能够同时调用bar() 是完全可以的,而且实际上是可取的。最后一个条件是foo() 应该尽快返回,而bar() 没有硬时间限制。
我一直在考虑最好的控制这种行为的各种方法。以最简单的形式使用synchronized 是行不通的,因为这会阻止对每个方法的并发调用。起初我认为ReadWriteLock 可能很合适,但这只会允许其中一个方法与其自身同时调用。我考虑的另一种可能性是将这些方法的请求排队在两个单独的队列中,并有一个消费者将同时执行队列中的每个foo(),然后执行队列中的每个bar(),但这似乎很难调整以避免不必要的阻塞foo()。
有什么建议吗?
【问题讨论】:
-
是否有机会使包含
foo和bar方法的对象不可变? -
可能没有帮助 - 在这种情况下,内部逻辑涉及远程 API 调用和数据库访问。
标签: java multithreading concurrency