很显然,从文件中读取时(例如)使用readLock,在写入文件时使用writeLock是合适的。但是,如果我有一个正在比较两个值的操作,例如:

if (i == j) {
    System.out.println("equal);
}


那么可以使用readLock()而不是writeLock来锁定此代码吗?当然,我什么都没写,但我正在比较两个
值,因为涉及到操作,所以与仅读取数据有点不同。请记住,“ i”或“ j”可能随时更改。从理论上讲,只有在writeLock()未修改资源的情况下,readLock()才会向前发展,但我可能无法完全理解此问题的所有复杂性。似乎有可能出现一些灰色区域,因此我认为我会得到一些建议。

谢谢大家,

马特

最佳答案

不要在读写方面考虑读/写锁,而应将它们视为互斥/共享。写锁是互斥的,读锁是共享的。

要回答您的问题,取决于情况。

假设您有一个正在更新i的线程,一个正在更新j的线程,另一个正在检查相等性的线程。在那种情况下,写线程将获得共享(读)锁,因为它们都可以并行操作,因为每个线程仅更新1个变量。然后,比较线程可以获取排他锁(写锁)以进行比较并执行操作,从而防止在执行操作时进行任何更新。

因此,请考虑互斥/共享以及应用程序的需求。

07-24 09:35