读到师兄的一篇博客,关于Java中的单件类模式,这么写的:
class Singleton {
private static Singleton instance;
// thread-safe singleton.
public static synchronized Singleton getInstance() {
if (instance == null)
instance == new Singleton();
return instance;
}
}
以前意识过单件类直接return不是线程安全的,但还真没注意过有static synchronized这种用法……
结论和猜测的是一样的:
A: synchronized static是某个类的范围,synchronized static cSync{}防止多个线程同时访问这个类中的synchronized static 方法。它可以对类的所有对象实例起作用。
B: synchronized 是某实例(对象)的范围,synchronized isSync(){}防止多个线程同时访问这个实例中的synchronized 方法。
另外,单件类在Java中还有可以不同步的方法:
class Singleton {
private static Singleton instance = new Singleton();
public static Singleton getInstance(){
return instance;
}
}