为什么在私有锁上使用私有锁?

发布于 2021-01-30 16:51:49

在阅读有关同步的内容时,我遇到了“监视器模式”以封装可变状态。

以下是示例代码

   public class MonitorLock {
      private final Object myLock = new Object();
      Widget widget;
      void someMethod() {
        synchronized(myLock) {
         // Access or modify the state of widget
        }
    }

}

用私有锁代替固有锁更好吗?

关注者
0
被浏览
65
1 个回答
  • 面试哥
    面试哥 2021-01-30
    为面试而生,有面试问题,就找面试哥。

    是的-这意味着您可以看到 所有可能获得该锁的代码 (不考虑反射的可能性)。

    如果您锁定this(这是我假设您通过“固有锁定”所指的),那么其他代码可以做到:

    MonitorLock foo = new MonitorLock();
    synchronized(foo) {
        // Do some stuff
    }
    

    该代码可能与MonitorLock自己的代码相距很远,并且可能调用其他方法,这些方法又将监视器带走。在这里很容易陷入死锁领域,因为您不容易看到要获取哪些锁。

    使用“私人”锁,您可以轻松查看获得该锁的 每段代码 ,因为它们都在内MonitorLock。因此,更容易推断出该锁定。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看