1 package com.study.mode; 2 /** 3 * 单例模式: 懒汉式,需要的时候创建。 4 * @ClassName: SingleBean2 5 * @author BlueLake 6 * @date 2012年9月5日 下午9:08:21 7 */ 8 public class SingleBean2 { 9 10 //1.私有化构造方法。 11 private SingleBean2(){ 12 13 } 14 //2.创建一个当前类的静态属性 15 private static SingleBean2 single = null; 16 17 //3.1 在需要的时候,创建对象。 18 public static SingleBean2 getSingleA(){ 19 if(single==null){ 20 single = new SingleBean2(); 21 } 22 return single; 23 } 24 25 //3.2 由于3.1的方法线程不安全,多线程时会有多个SingleBean2实例。所以加锁 26 public synchronized static SingleBean2 getSingleB(){ 27 if(single==null){ 28 single = new SingleBean2(); 29 } 30 return single; 31 } 32 33 //3.3 ,由于每次调用3.2这个方法都要加锁,如果有的话直接返回就可以了,所以浪费内存 34 public static SingleBean2 getSingleC(){ 35 //如果存在,直接返回,这里不用锁 36 if(single== null){ 37 //如果,不存在,加锁,创建 38 synchronized(SingleBean2.class){ 39 //强壮性考虑,创建前,判断 40 if(single==null){ 41 single = new SingleBean2(); 42 } 43 } 44 } 45 return single; 46 } 47 }
时间: 2024-10-31 11:59:38