相关疑难解决方法(0)

同步块中的静态与非静态锁定对象

尝试可视化和理解同步.

  1. 同步块使用静态锁定对象(代码A)非静态锁定对象(代码B)有什么区别?
  2. 它在实际应用中有何不同?
  3. 另一个不会有什么陷阱?
  4. 确定使用哪一个的标准是什么?

代码A.

public class MyClass1 {
  private static final Object lock = new Object();
  public MyClass1() {
    //unsync
    synchronized(lock) {
      //sync
    }
    //unsync
  }
}
Run Code Online (Sandbox Code Playgroud)

代码B.

public class MyClass2 {
  private final Object lock = new Object();
  public MyClass2() {
    //unsync
    synchronized(lock) {
      //sync
    }
    //unsync
  }
}
Run Code Online (Sandbox Code Playgroud)

注意

上面的代码显示了构造函数,但您可以在静态方法和非静态方法中讨论行为的不同之处.另外,当synchronized块修改静态成员变量时,使用静态锁是否有利?

我已经在这个问题中查看了答案,但不清楚不同的使用场景是什么.

java static synchronization locking synchronized

36
推荐指数
1
解决办法
2万
查看次数

标签 统计

java ×1

locking ×1

static ×1

synchronization ×1

synchronized ×1