博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
五、单件模式
阅读量:6441 次
发布时间:2019-06-23

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

经典单件

public class Singleton {    private static Singleton uniqueInstance;    private Singleton() {}    public static Singleton getInstance() {        if (uniqueInstance == null) {            uniqueInstance = new Singleton();        }        return uniqueInstance;    }}

线程安全的单件

  • 直接生成单件对象
public class Singleton {    private static Singleton uniqueInstance = new Singleton();    private Singleton() {}    public static Singleton getInstance() {        return uniqueInstance;    }}
  • 使用synchronized
public class Singleton {    private static Singleton uniqueInstance;    private Singleton() {}    public static synchronized Singleton getInstance() {        if (uniqueInstance == null) {            uniqueInstance = new Singleton();        }        return uniqueInstance;    }}
  • 双重检查加锁
public class Singleton {    private volatile static Singleton uniqueInstance;    private Singleton() {}    public static Singleton getInstance() {        if (uniqueInstance == null) {            synchronized (Singleton.class) {                if (uniqueInstance == null) {                    uniqueInstance = new Singleton();                }            }        }        return uniqueInstance;    }}

个人理解

单件模式确保一个类只有一个实例,并提供一个全局访问点。

在经典的单件模式中,如果有两个线程访问一个单件模式,会发生线程安全的问题,产生两个单件实例。
解决方法:
1、在单件中直接生成单件对象,然后返回。(如果单件对象创建的开销比较大,会造成资源浪费)
2、在单件的全局访问点上使用synchronized 关键字,可以解决问题。(线程同步会降低性能)
3、使用双重检查加锁的方式,完美的解决问题。

转载于:https://www.cnblogs.com/huacesun/p/6622496.html

你可能感兴趣的文章
IIS_右键点击浏览网站没有反应
查看>>
POJ训练计划1035_Spell checker(串处理/暴力)
查看>>
Makefile 使用总结【转】
查看>>
一起学微软Power BI系列-官方文档-入门指南(4)Power BI的可视化
查看>>
Android.util.Log 关于Android开发中打印log
查看>>
转:Python yield 使用浅析 from IBM Developer
查看>>
仪表板颜色
查看>>
NodeJS、NPM安装配置步骤(windows版本)
查看>>
mysql oom之后的page 447 log sequence number 292344272 is in the future
查看>>
chrome禁用某个网站js脚本的执行
查看>>
数组排序 和 二分法查找
查看>>
MongoDB C Driver Building on Windows
查看>>
备忘zookeeper(单机+伪集群+集群)
查看>>
无需编译、快速生成 Vue 风格的文档网站
查看>>
AtomicBoolean介绍与使用
查看>>
Elasticsearch之curl删除
查看>>
Apache Spark 内存管理详解(转载)
查看>>
JS隐藏号码中间4位
查看>>
windows下安装Rabbitmq详解
查看>>
HTTP协议中POST、GET、HEAD、PUT等请求方法以及一些常见错误
查看>>