使用静态变量进行同步会产生什么影响?
public class Something {
public static final String LOCK = "lala";
public void doSomething(){
synchronized(LOCK){
...
}
}
}
答案 0 :(得分:4)
只有一个线程一次能够调用doSomething()
,无论Something
实例是什么,因为所有实例都共享同一个锁。
为了完整,我将在这里重复@assylias的注释:不要在公共变量上进行同步,也不要在String文字上进行同步,即使由于字符串池而私有,也会共享。你不希望任何其他不相关的类在同一个锁上同步,通过这样做引入死锁这样的副作用。
答案 1 :(得分:0)
public static final String LOCK = "lala";
public void doSomething(){
synchronized(LOCK){
...
}
}
在进入同步块之前由线程获得的锁定将是类级别锁定而不是对象级别锁定。