单例设计模式是我们开发中常用的设计模式,改设计模式可以减少系统的开销,在系统设置全局访问点,共享系统资源,向我们的Spring bean 管理就是单例模式的体现
而且在日常开发中,也会需要使用到单例模式
常用的单例模式有:
1.饿汉式:------> 一旦类初始化就会创建该对象,安全性高,线程是安全的
public class Singn { //static 类加载就创建该类的对象 private static Singn demo =new Singn(); //构造方法私有化,外部不能直接创建对象 private Singn(){ } //提供一个公共方法返回对象,提供一个对象提取点 public static Singn getInstance(){ return demo; }
2.懒汉式 ----------> 线程安全,需要方法同步,并发效率低,单例延时加载,在使用的时候才会去加载判断,所以需要方法的同步
public class Singn { //声明对象 private static Singn demo ; //构造方法私有化 private Singn(){ } //使用时候进行创建对象判断 synchronized 进行同步,没有就创建,有就不创建,在高并发情况下,速度就会大大折扣 public static synchronized Singn getInstance(){ if(demo==null){ demo=new Singn(); } return demo; }
3.静态内部类,以为类的加载是天然线程安全的
public class Singn { //定义静态内部类 private static class signInstance{ private static final Singn sn =new Singn(); } //私有化构造器 private Singn(){ } //调用内部类方法得到对象 public static Singn si(){ return signInstance.sn; } }
4,.双重检测锁:
public class WorkTestEntity { // 私有化构造对象 private WorkTestEntity (){} //声明 private static WorkTestEntity sign; public static WorkTestEntity getInstance(){ //双重检测机制,当对象为空的时候 if(sign==null) { //防止并发,我们需要再进行加锁判断,对象是不是真的为空,加入同步代码块 synchronized(WorkTestEntity.class) { if(sign==null) { sign =new WorkTestEntity(); } } } return sign; } }
原创打造,多多指教