博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
几种单例模式的写法
阅读量:6378 次
发布时间:2019-06-23

本文共 1756 字,大约阅读时间需要 5 分钟。

hot3.png

方法一:

public class Singleton1 {    private Singleton1(){        System.out.print("Singleton1 created");    }    private static Singleton1 instance = new Singleton1();    public static Singleton1 getInstance(){        return instance;    }    public static void createString(){        System.out.print("String created");    }}

当使用Singleton.createString()时执行结果如下:

Singleton createdString created

虽然并没有使用单例类,但还是被加载出来了。为了解决这个问题我们引入方法二。

方法二:

public class Singleton2 {    private Singleton2(){        System.out.print("Singleton2 created");    }    private static Singleton2 instance = null;    public static sychronized Singleton2 getInstance(){        if (install == null){            instance = new Singleton2();        }        return instance;    }}

第二种方法使用了同步关键字,实现了延迟加载功能,但是由于同步关键字是不允许多个线程同事访问被sychronized修饰的代码,所以可想而知在多线程的项目中他的效率还不如方法一(此处可以自己验证)。

方法三:

public class Singleton3 {    private Singleton(){        System.out.print("Singleton3 created");    }    private static class SingletonHolder {        private static Singleton3 instance = new Singleton3();    }    public static Singleton3 getInstance() {        return SingletonHolder.instance;    }}

在Singleton3中,单例模式使用内部类来维护单例的实例,当Singleton3被加载时,其内部类不会被加载,而当getInstance方法调用时,才会加载SingletonHolder类,保证了延迟加载的功能。

方法四:

//线程锁单列模式public class Singleton4 {    private Singleton(){        System.out.print("Singleton4 created");    }    public volatile static Singleton4 instance;    public static Singleton4 getInstance() {        if(instance == null){//已存在的线程效率较高            sychronized(Singleton4.class){                if(instance == null){                    instance = new Singleton4();                }            }        }        return instance;    }}

 

转载于:https://my.oschina.net/kimyeongnam/blog/515944

你可能感兴趣的文章
物联网到底何时才能称为“爆发”?
查看>>
《Java多线程编程核心技术》——1.2节使用多线程
查看>>
不用惊慌 关于苹果警告的一些分析
查看>>
《VMware 网络技术:原理与实践》—— 2.3 OSI模型
查看>>
读书笔记之《实战Java虚拟机》(9):Class 文件结构
查看>>
1024城市峰会 | 当A.I.邂逅古都西安
查看>>
好看的卡片阴影
查看>>
理解 Mach O 并提高程序启动速度
查看>>
Vue实战篇(PC端商城项目)
查看>>
你要做的是产品经理,不是作图经理!
查看>>
JavaEE 项目常见错误汇总
查看>>
快速掌握Python基础语法(下)
查看>>
【Android自定义View】绘图之文字篇(三)
查看>>
适配iOS 11和iPhoneX屏幕适配遇到的一些坑
查看>>
Fetch API 简单封装
查看>>
给媳妇做一个记录心情的小程序
查看>>
iOS App无需跳转系统设置自动连接Wi-Fi
查看>>
一道柯里化面试题
查看>>
本科studying abroad 无法毕业申请硕士转学转校处理一切studying abroad 问题
查看>>
RxJava(RxAndroid)的简单学习
查看>>