为什么在私有锁上使用私有锁?
在阅读有关同步的内容时,我遇到了“监视器模式”以封装可变状态。
以下是示例代码
public class MonitorLock {
private final Object myLock = new Object();
Widget widget;
void someMethod() {
synchronized(myLock) {
// Access or modify the state of widget
}
}
}
用私有锁代替固有锁更好吗?
-
是的-这意味着您可以看到 所有可能获得该锁的代码 (不考虑反射的可能性)。
如果您锁定
this
(这是我假设您通过“固有锁定”所指的),那么其他代码可以做到:MonitorLock foo = new MonitorLock(); synchronized(foo) { // Do some stuff }
该代码可能与
MonitorLock
自己的代码相距很远,并且可能调用其他方法,这些方法又将监视器带走。在这里很容易陷入死锁领域,因为您不容易看到要获取哪些锁。使用“私人”锁,您可以轻松查看获得该锁的 每段代码 ,因为它们都在内
MonitorLock
。因此,更容易推断出该锁定。
-
为什么Python的“私有”方法实际上不是私有的?
2021-02-02 关注 0 浏览164 1答案
-
为什么 Python 的“私有”方法实际上不是私有的?
2022-03-22 关注 0 浏览47 1答案
-
小虎的机车既没有锁,也没有违规,但是仍然被锁上了,为什么?
2022-05-21 关注 0 浏览15 1答案
-
为什么Spring允许在私有方法上使用控制器注释的请求映射?
2021-02-02 关注 0 浏览107 1答案
-
在图书馆,存放书包时,使用自己带的锁将自助存包柜锁上 。
2022-05-07 关注 0 浏览37 1答案
-
为什么克隆可以在另一个对象上设置私有字段?
2021-01-30 关注 0 浏览64 1答案
-
施封锁上的封印号码,每站为( )数码循环使用。
2022-05-09 关注 0 浏览17 1答案
-
施封锁上的封印号码,每站为( )数码循环使用。
2022-05-09 关注 0 浏览14 1答案
-
为什么不禁止访问私有字段?
2021-01-30 关注 0 浏览72 1答案
-
施封锁上的封印号码,每站为( )数码循环使用。[311020201]
2022-05-08 关注 0 浏览13 1答案