Java 同步的影响(静态变量)

Java 同步的影响(静态变量),java,concurrency,Java,Concurrency,使用静态变量进行同步的效果如何 public class Something { public static final String LOCK = "lala"; public void doSomething(){ synchronized(LOCK){ ... } } } 一次只有一个线程能够调用doSomething(),而不管某个实例是什么,因为所有实例都共享同一个锁 为了完整起见,我将在这里重复@assyl

使用静态变量进行同步的效果如何

public class Something {

    public static final String LOCK = "lala";

    public void doSomething(){
        synchronized(LOCK){
        ...
        }
    }
}

一次只有一个线程能够调用
doSomething()
,而不管
某个
实例是什么,因为所有实例都共享同一个锁

为了完整起见,我将在这里重复@assylias的注释:不要对公共变量进行同步,也不要对字符串文本进行同步,因为字符串池即使是私有的,它们也是共享的。您不希望任何其他不相关的类在同一个锁上同步,这样做会引入死锁之类的副作用

public static final String LOCK = "lala";

public void doSomething(){
    synchronized(LOCK){
    ...
    }
}

线程在进入同步块之前获得的锁将是类级锁,而不是对象级锁。

-此外,锁定公共变量是一个坏主意,锁定字符串文本是一个更坏的主意。不同步变量,您可以在对象上进行同步,因此它是否是静态的并不重要。这意味着您不能同时调用
doSomething()
。请参见“否”,这一点根本不相似。静态方法将无法访问任何实例字段。是的,我的意思是,就同步用例而言。删除了那个部分。德克萨斯州