单例模式
Posted 帆疯子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单例模式相关的知识,希望对你有一定的参考价值。
单例模式主要作用:确保一个类最多只有一个实力,并提供一个全局访问点。
经典模式(懒汉):
public class Singleton{ private static Singleton uniqeInstance=null; private Singleton(){} public static Singleton getInstance(){ if(uniqeInstance==bull){ uniqeInstance=new Singleton(); } return uniqeInstance; } }
经典模式在多线程的情况下,会导致不能正常工作;
线程同步锁(懒汉):
public class Singleton{ private static Singleton uniqeInstance=null; private Singleton(){} public static synchronized Singleton getInstance(){ if(uniqeInstance==bull){ uniqeInstance=new Singleton(); } return uniqeInstance; } }
使用同步锁,简单粗暴,但较为消耗资源。在大量调用的放大中不推荐使用。
‘急切’创建实例(饿汉):
public class Singleton{ public volatile static Singleton uniqueInstance = new Singleton(); private Singleton(){} public static Singleton getInstance() { return uniqueInstance ; } }
可以解决多线程的同步问题,直接在类装载就实例化。但在项目中这个方法根本就没有使用到,对内存资源也是有一定的消耗。
双重检查加锁:
public class Singleton { private volatile static Singleton singleton; private Singleton (){} public static Singleton getSingleton() { if (singleton == null) { synchronized (Singleton.class) { if (singleton == null) { singleton = new Singleton(); } } } return singleton; } }
在JDK1.5之后,双重检查锁定才能够正常达到单例效果。
以上是关于单例模式的主要内容,如果未能解决你的问题,请参考以下文章