JAVA面试经典合集2:怎样写出一个线程安全的单例模式

  

怎样写出一个线程安全的单例模式

  
 <代码>包com.chendan.mianshi;/* *
  *
  *
  * @Description
  * @author ChenDan 624665255 @qq.com
  * @date 2019年8月4日下午8:47:13
  *
  */公开课MianShiTest2 {
  公共静态void main (String [] args) {//com.chendan.mianshi.SingleTon@1c53fd30//com.chendan.mianshi.SingleTon@1c53fd30//可以看到结果一样
  getInstanceEhs ();//com.chendan.mianshi.SingleTon2@282ba1e//com.chendan.mianshi.SingleTon2@282ba1e
  getInstanceLhs ();//com.chendan.mianshi.SingleTon3@f5f2bb7//com.chendan.mianshi.SingleTon3@f5f2bb7
  getInstanceLhs2 ();
  
  }//饿汉式方法
  公共静态孔隙getInstanceEhs () {//调用GetInstance直接返回一个实例对象,且是唯一的
  单例instance1=SingleTon.getInstance ();
  单例instance2=SingleTon.getInstance ();//com.chendan.mianshi.SingleTon@1c53fd30
  System.out.println (instance1);//com.chendan.mianshi.SingleTon@1c53fd30
  System.out.println (instance2);
  }//懒汉式方法
  
  公共静态孔隙getInstanceLhs () {//调用getInstance直接返回一个实例对象,且是唯一的
  SingleTon2 instance1=SingleTon2.getInstance ();
  SingleTon2 instance2=SingleTon2.getInstance ();//ccom.chendan.mianshi.SingleTon2@cad498c
  System.out.println (instance1);//com.chendan.mianshi.SingleTon2@cad498c
  System.out.println (instance2);
  }
  
  公共静态孔隙getInstanceLhs2 () {//调用getInstance直接返回一个实例对象,且是唯一的
  SingleTon3 instance1=SingleTon3.getInstance ();
  SingleTon3 instance2=SingleTon3.getInstance ();//com.chendan.mianshi.SingleTon2@cad498c
  System.out.println (instance1);//com.chendan.mianshi.SingleTon2@cad498c
  System.out.println (instance2);
  }
  
  }//饿汉式直接初始化方法
  单例类{
  
  私人单例(){
  
  }//饿汉式直接静态初始化,保证唯一,但是初始类时就加载内存,性能稍低
  私有静态单例实例=new SingleTon ();//创建直接返回线程方法
  公共静态单例getInstance () {
  返回实例;
  }
  
  }//懒汉式静态内部类初始化方法
  类SingleTon2 {
  
  私人SingleTon2 () {
  }
  
  私有静态类Singleton2Holder {
  最后公共静态SingleTon2实例=new SingleTon2 ();
  }
  
  公共静态SingleTon2 getInstance () {
  返回Singleton2Holder.instance;
  }
  
  }
  
  类SingleTon3 {
  
  私人SingleTon3 () {
  }
  
  公共静态SingleTon3实例=零;
  
  公共静态SingleTon3 getInstance () {
  
  如果(实例==null) {
  同步(SingleTon3.class) {
  如果(实例==null) {
  实例=new SingleTon3 ();
  }
  }
  }
  
  返回实例;
  
  }
  
  } 
  

总结:最优方法为内部静态类的方法,即方法2

JAVA面试经典合集2:怎样写出一个线程安全的单例模式