什么是java单例设计模式
来源:
zhiliaoadmin
发布时间:
2021-03-08 14:08:58
浏览次数:
0
1. 什么是设计模式

一、单例模式
意图:保证一个类仅有一个实例,并提供一个访问他的全局访问点。
主要解决:一个全局使用的类频繁的创建与销毁。
何时使用:当您想控制实例数目节省系统资源的时候。
如何解决:判断系统是否已经有这个单例,如果有则返回,如果没有则创建。
关键代码:构造函数是私有的。

1. 饿汉式单例
java //饿汉式单例 public class Hungry{ //可能会浪费空间 private byte[] data1=new byte[1024*1024]; private byte[] data2=new byte[1024*1024]; private byte[] data3=new byte[1024*1024]; private byte[] data4=new byte[1024*1024]; private Hungry(){ } private final static Hungry HUNGRY = new Hungry(); public static Hungry getInstance(){ return HUNGRY; } }
饿汉式单例由于new一个对象时不是一个原子性操作,即 new一个对象时, java内部会进行更细致的线程操作,则导致在多线程的条件下会不安全
2. 懒汉式单例
java //懒汉式单例 public class LazyMan{ private LazyMan(){ } private volatile static LazyMan lazyMan; //双重检测模式的懒汉式单例 ,即DCL懒汉式 public static LazyMan getInstance(){ if(lazyMan==null){ synchronized(LazyMan.class){ if(lazyMan==null){ lazyMan=new LazyMan(); //不是一个原子性操作 /** 1.分配内存空间 2.执行构造方法,初始化对象 3.把这个对象指向这个空间 123 A 132 B 此时lazyMan还没有完成构造 **/ } } } return lazyMan; } //多线程下不安全 //多线程并发 public static void main(String[] args){ for(int i = 0; i < 10; i++){ new Thread(()->{ lazyMan.getInstance(); }).start(); } }}
3. 内部类实现单例
java //静态内部类实现public class Holder{ public static class InnerClass{ } public static Holder getInstance(){ return InnerClass.HOLDER; } publ