单例模式
---恢复内容开始---
1、饿汉式:在程序启动或单件模式类被加载的时候,单件模式实例就已经被创建。
2、懒汉式:当程序第一次访问单件模式实例时才进行创建。
如何选择:如果单件模式实例在系统中经常会被用到,饿汉式是一个不错的选择。
反之如果单件模式在系统中会很少用到或者几乎不会用到,那么懒汉式是一个不错的选择
1、饿汉式
public class HungerSingleTon { private HungerSingleTon(){ System.out.println("the instance of hungersingleton has been create.."); } private static HungerSingleTon getInstance(){ return new HungerSingleTon(); } public static void main(String[] args) { HungerSingleTon.getInstance(); } }
2、懒汉式 线程安全:这种写法在getInstance()方法中加入了synchronized锁。能够在多线程中很好的工作,而且看起来它也具备很好的lazy loading,但是效率很低(因为锁),并且大多数情况下不需要同步。
当我们类中如果还有一个静态变量如
private static int Max_SISZ = 1024; 如果其他程序调用了这个变量,那么getInstance()也被实例化了 ,所以我们使用静态内部类来实现
public class LazySingleTon { private static LazySingleTon lazySingleTon = null; private LazySingleTon(){ System.out.println("the instance of LazySingleTon has been create.."); } private static LazySingleTon getInstance(){ if(lazySingleTon==null){ lazySingleTon = new LazySingleTon(); } return lazySingleTon; } public static void main(String[] args) { LazySingleTon.getInstance(); } }
3.静态内部类
public class SingleTon { private static Logger logger = LoggerFactory.getLogger(SingleTon.class); private SingleTon(){ logger.info("the singleton instance create.."); } private static class SingleHolder{ private static SingleTon singleTon = new SingleTon(); } private static SingleTon getInstance(){ return SingleHolder.singleTon; } public static void main(String[] args) { SingleTon instance = SingleTon.getInstance(); } }
逃不过逝水流年 没有时间可以浪费了!!!

浙公网安备 33010602011771号