java - 为什么使用私有(private)锁而不是内部锁?

标签 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
        }
    }

用私有(private)锁代替内在锁在任何方面都更好吗?

最佳答案

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

如果您锁定this(我假设您指的是“内在锁”),那么其他代码可以执行以下操作:

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

此代码可能与 MonitorLock 本身相去甚远,并且可能会调用其他方法,这些方法又会移除监视器。在这里很容易陷入死锁,因为您无法轻易看出什么将获得哪些锁。

使用“私有(private)”锁,您可以很容易地看到获得该锁的每一段代码,因为它们都在MonitorLock 中。因此更容易推断出该锁。

关于java - 为什么使用私有(private)锁而不是内部锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7513227/

相关文章:

java - 如何发出 Http Get 快速请求?

java - 在java中加载大文本文件的最佳方式

java - 如何为游戏创建 2D 运动场?

c++ - 使用 try_lock boost 锁定

shell - 锁定多次并行调用的shell脚本的输出文件

java - 当FTP路径有多个子目录时上传空白文件

c++ - 长时间锁定互斥锁是否安全?

Consumer/Producer多线程同步错误

c++ - 锁定相互引用的资源对

google-app-engine - Google AppEngine 服务器实例时钟同步