【发布时间】:2017-10-24 22:10:49
【问题描述】:
我有十个通用函数,它们都在我的框架中频繁运行。其中两个是 A 类函数,另外八个是 B 类函数。我希望能够同时运行 A 类函数,但不允许 B 类函数在 A 类函数运行时运行。同样,如果 B 类函数正在运行,我不希望任何 A 类函数被允许运行。如果已经在运行,我也不希望任何其他类型 B 运行。
除了使用 ReentrantReadWriteLock,使用 A 类型的读锁和 B 类型的写锁之外,还有什么更好的方法(特别是在 Java 中)?
ReentrantReadWriteLock 适用于大多数时候需要读取器锁,而“偶尔”需要写入器锁的情况。然而,在我的例子中,所有的函数都一直在使用,这意味着这些函数都以相同的频率被调用。无论我使 ReentrantReadWriteLock 公平还是不公平,我都看到我的系统中存在很多锁争用。
【问题讨论】:
-
如果
ReentrantReadWriteLock适合您的目的,您为什么还要搜索其他内容? Java 中不太可能存在另一种机制,其行为与ReentrantReadWriteLock相同。如果您认为 rw-lock 不能反映 A 和 B 之间相关性的性质,请提供有关这些函数的更多信息(例如,为什么它们不能同时运行)。 -
您为什么要寻找“更好”的方法?使用
ReadWriteLock有什么问题?你想“修复”什么?仅仅是你不喜欢这些名字吗,例如如果它们被称为独占锁和共享锁,对你来说会更好吗? -
查看编辑以获取更多详细信息
-
多个B方法可以同时运行吗?
-
好问题 - 编辑问题以改进
标签: java multithreading concurrency