前言:
此刻各位老铁们对“单例模式懒汉和饿汉优缺点”大致比较珍视,同学们都需要知道一些“单例模式懒汉和饿汉优缺点”的相关资讯。那么小编也在网摘上收集了一些有关“单例模式懒汉和饿汉优缺点””的相关内容,希望各位老铁们能喜欢,姐妹们快快来了解一下吧!作用:在应用程序中保证最多有一个实例。
好处:
提升运行效率。
实现数据共享。案例:application对象的有效范围
懒汉式
面试时一般能手写
例子:
把构造方法私有化。
其他类不能实例化这个对象。
代码:package com.wq;public class SingoTon { //由于对象需要静态方法调用,把方法设置为static //由于对象是static,必须设置访问权限修饰符为private,如果是public 可以直接调用对象,不执行访问入口 private static SingoTon singoTon; /** * 构造方法 * 方法名和类名相同 * 无返回值 * * * 其他类不能实例化 */ private SingoTon(){ } /** * 实例方法 * 实例方法必须通过对象调用 * * * 设置方法为静态方法 * * * 多线程访问下 * @return */ public static SingoTon getInstance() { //添加逻辑,如果实例化过,直接返回 if (singoTon==null) { /* * 多线程情况下,可能出现if同时成立的情况,添加锁 */ synchronized (SingoTon.class) { //双重验证 if (singoTon==null) { singoTon=new SingoTon(); } } } return singoTon;}}
测试类:
package com.wq.test;import com.wq.SingoTon;public class Test { public static void main(String[] args) { SingoTon singoTon =SingoTon.getInstance(); SingoTon singoTon1 =SingoTon.getInstance(); //如果为ture则为单例 System.out.println(singoTon==singoTon1);}}
结果:
为什么叫懒汉式
对象只有被调用时才会去创建
饿汉式
由于添加了锁
导致多线程等待---效率会低
使用饿汉式
解决了懒汉式中多线程访问可能出现同一个对象和效率低问题
package com.wq;public class SingoTon { //在类加载时会被实例化private static SingoTon singoTon=new SingoTon(); private SingoTon(){} public static SingoTon getInstance() { return singoTon;}}
package com.wq.test;import com.wq.SingoTon;public class Test { public static void main(String[] args) { SingoTon singoTon =SingoTon.getInstance(); SingoTon singoTon1 =SingoTon.getInstance(); //如果为ture则为单例 System.out.println(singoTon==singoTon1);}}
当你选一种就可以
标签: #单例模式懒汉和饿汉优缺点