关于Java中的synchronized和static synchronized和单件类

读到师兄的一篇博客,关于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这种用法……

于是搜了一下,发现了这篇文章《synchronized与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;
	}
}

最后给师兄博客加个反链。《Create singleton pattern in Java》

 

 

1 thought on “关于Java中的synchronized和static synchronized和单件类

  1. Jeoygin

    对方法加synchronized修饰符,synchronized static等同于synchronized(Singleton.class){},synchronized等同于synchronized(this){}
    Effective Java书上说实现Singleton的最佳方法是这样的:
    public enum Singleton {
    INSTANCE;
    }

    Reply

Leave a Reply to Jeoygin Cancel reply

Your email address will not be published.