【问题标题】:Java synchronize statement around a lock围绕锁的 Java 同步语句
【发布时间】:2009-06-25 20:49:29
【问题描述】:

我想知道

synchronize (lock) {
    ... 
}

其中 lock 是java.util.concurrent.locks.Lock 的一个实例,将lock 视为任何其他对象或作为try-finally 习惯用法,即

 lock.lock(); 
 try {
     ... 
 } finally { 
    lock.unlock();
 }

【问题讨论】:

    标签: java multithreading synchronization locking


    【解决方案1】:

    Lock documentation:

    注意 Lock 实例只是 正常的物体,它们本身可以是 用作同步中的目标 陈述。获取监视器锁定 没有指定的 Lock 实例 与调用任何 该实例的 lock() 方法。这是 建议避免混淆 您永远不会在此使用 Lock 实例 方式,除了在他们自己的范围内 实施。

    所以基本上,它被视为任何其他对象。而且,不要那样做。

    【讨论】:

    • @hhafez:“不要那样做”,因为文档说“为了避免混淆,建议不要以这种方式使用 Lock 实例,除非在它们自己的实现中。”
    【解决方案2】:

    它会像对待任何其他对象一样对待锁。

    【讨论】:

      【解决方案3】:

      可以应用 C# 编程语言中的 lock 语句来限制对代码的特定部分的访问,一次只能访问一个线程。

      【讨论】:

      • 这是一个 Java 问题,而不是 C# 问题。 (我没有投反对票。)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-23
      • 1970-01-01
      • 2020-06-15
      • 2021-11-27
      • 2012-07-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多