Vin*_*C M 6 java synchronization locking
在阅读有关同步的过程中,我遇到了"监控模式"来封装可变状态.
以下是示例代码
public class MonitorLock {
private final Object myLock = new Object();
Widget widget;
void someMethod() {
synchronized(myLock) {
// Access or modify the state of widget
}
}
Run Code Online (Sandbox Code Playgroud)
}
以任何方式拥有私有锁而不是内在锁更好吗?
Jon*_*eet 14
是的 - 这意味着你可以看到所有可能获得锁定的代码(不考虑反射的可能性).
如果你锁定this
(这是我假设你所指的"内在锁"),那么其他代码可以做到:
MonitorLock foo = new MonitorLock();
synchronized(foo) {
// Do some stuff
}
Run Code Online (Sandbox Code Playgroud)
这段代码可能离MonitorLock
它自己很远,可能会调用其他方法来反过来取出监视器.在这里很容易进入死锁区域,因为你无法轻易看到将要获得哪些锁定.
使用"私有"锁定,您可以轻松查看获取该锁定的每一段代码,因为它都在其中MonitorLock
.因此,更容易推理出这种锁定.
归档时间: |
|
查看次数: |
1170 次 |
最近记录: |