4

使用静态变量进行同步有什么影响?

public class Something {

    public static final String LOCK = "lala";

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

2 回答 2

5

doSomething()无论实例是什么,一次只能调用一个线程Something,因为所有实例共享同一个锁。

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

于 2013-08-13T10:12:33.417 回答
0
public static final String LOCK = "lala";

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

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

于 2013-08-13T10:20:18.393 回答