Java volatile的用法

Java volatile的用法
package com.abin.lee.collection.singleton;
/**
 * 双重检查加锁 单例模式
 * @author abin
 * 这个单例模式写法可以大大减少getInstance的时间消耗!
 */
public class SingletonOne {
  /** 
     * volatile关键词确保:当singleton变量被初始化成SingletonOne实例时,多个线程正确地处理singleton变量 
     */ 
 private volatile static SingletonOne singleton=null;
 public SingletonOne(){}
 public static SingletonOne getInstance(){
  if(null==singleton){//检查实例,如果不存在就进入同步区块
   synchronized (SingletonOne.class) {//注意,只有第一次才彻底执行这里的代码
    if(null!=singleton){
     singleton=new SingletonOne();
    }
   }
  }
  return singleton;
 }
}





package com.abin.lee.collection.singleton;

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

 private SingletonTwo() {
 }

 public static SingletonTwo getInstance() {
  return singleton;
 }
}

你可能感兴趣的:(Java volatile的用法)