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