Java volatile的用法

Java 理论与实践: 正确使用 Volatile 变量

volatile 变量使用指南



http://www.ibm.com/developerworks/cn/java/j-jtp06197.html

另附 双重检查加锁 单例模式

public class Singleton {
	/**
	 * volatile关键词确保:当uniqueInstance变量被初始化成Singleton实例时,多个线程正确地处理uniqueInstance变量
	 */
	private volatile static Singleton uniqueInstance;

	private Singleton() {
	}

	public static Singleton getInstance() {
		if (uniqueInstance == null) {//检查实例,如果不存在就进入同步区块
			synchronized (Singleton.class) {//注意,只有第一次才彻底执行这里的代码
				if (uniqueInstance == null) {
					uniqueInstance = new Singleton();
				}
			}
		}
		return uniqueInstance;
	}
}

上面的单例模式写法可以大大减少getInstance的时间消耗!

“急切”单例模式
public class Singleton {
	/**
	 * volatile关键词确保:当uniqueInstance变量被初始化成Singleton实例时,多个线程正确地处理uniqueInstance变量
	 */
	private volatile static Singleton uniqueInstance = new Singleton();

	private Singleton() {
	}

	public static Singleton getInstance() {
		return uniqueInstance;
	}
}



你可能感兴趣的:(volatile)