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

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

单例顾名思义就是只会有单个实例。

这里介绍四种单例的写法:

1、饿汉式(推荐,因为简单实用)

/** * 单例模式 饿汉 简单实用 * @author wangkai * @date 2020-06-24 13:02 */public class SingleTon {    private static SingleTon INSTANCE = new SingleTon();    private SingleTon(){}    public static SingleTon getInstance(){        return INSTANCE;    }}

2、枚举方式(就单例而讲,完美,但不见得单例都要搞成枚举)

/** * 枚举方式 * 可以解决线程同步问题,也可以防止反序列化(因为枚举没有构造方法) * @author  * @date 2020-11-19 17:27 */public enum SingleTon3 {    INSTANCE;    public void m(){}    public static void main(String[] args) {        SingleTon3.INSTANCE.m();    }}

3、DCL单例(双重检查+加锁)

/** * 双重检查 * 需要加下volatile,防止JIN(java-in-time)的时候指令重排造成的问题 * @author  * @date 2020-11-19 17:09 */public class SingleTon2 {    private static volatile SingleTon2 INSTANCE;    private SingleTon2(){}    public static SingleTon2 getInstance(){        if(INSTANCE == null){            synchronized (SingleTon2.class){                if(INSTANCE == null){                    INSTANCE = new SingleTon2();                }            }        }        return INSTANCE;    }}

4、静态内部类

/** * 静态内部类的方式 * 是由jvm控制线程安全。jvm加载一个类只会加载一次,所以其内部静态类也会被加载一次。 * @author  * @date 2020-11-19 17:34 */public class SingleTon4 {    private SingleTon4(){}    private static class MyHolder{        private final static SingleTon4 INSTANCE = new SingleTon4();    }    public static SingleTon4 getInstance(){        return MyHolder.INSTANCE;    }}

 

转载地址:http://rqcdi.baihongyu.com/

你可能感兴趣的文章
Linux常用统计命令之wc
查看>>
测试必会之 Linux 三剑客之 sed
查看>>
Socket请求XML客户端程序
查看>>
Java中数字转大写货币(支持到千亿)
查看>>
Java.nio
查看>>
函数模版类模版和偏特化泛化的总结
查看>>
VMware Workstation Pro虚拟机不可用解决方法
查看>>
最简单的使用redis自带程序实现c程序远程访问redis服务
查看>>
redis学习总结-- 内部数据 字符串 链表 字典 跳跃表
查看>>
iOS 对象序列化与反序列化
查看>>
iOS 序列化与反序列化(runtime) 01
查看>>
iOS AFN 3.0版本前后区别 01
查看>>
iOS ASI和AFN有什么区别
查看>>
iOS QQ侧滑菜单(高仿)
查看>>
iOS 扫一扫功能开发
查看>>
iOS app之间的跳转以及传参数
查看>>
iOS __block和__weak的区别
查看>>
Android(三)数据存储之XML解析技术
查看>>
Spring JTA应用之JOTM配置
查看>>
spring JdbcTemplate 的若干问题
查看>>