博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(一)单例模式
阅读量:6327 次
发布时间:2019-06-22

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

一、简单单例模式

所谓单例模式,就是在整个应用中保证只有一个类的实例存在。就像是Java Web中的application,也就是提供了一个全局变量,用处相当广泛,比如保存全局数据,实现全局性的操作等。

最简单的实现就是,把类的构造方法设为private,从而保证其他类无法直接new出实例。然后在该类中提供一个静态的实例返回给调用者,这样就可以保证只有一个实例。

package 单例模式;/** * Created by shyroke on 2018/4/23. */public class SingleTon {    private static SingleTon newInstance = null;    private SingleTon(){}    public static SingleTon newInstance(){        if(newInstance ==  null){            newInstance = new SingleTon();        }        return newInstance;    }    public static void main(String[] args) {        SingleTon s1 = SingleTon.newInstance();        SingleTon s2 = SingleTon.newInstance();        System.out.println(s1);        System.out.println(s2);    }}

 

结果如下图,引用地址一样,说明是同一个对象。

 

 

二、多线程版的单例

  • 上个例子在并发中是有问题的。
  • 线程A调用newInstance方法,因为是第一次调用,所以newInstance =null.线程A开始创建newInstance 的实例,此时线程B开始执行,这个时候线程A还没实例化newInstance ,此时的newInstance 仍然为null,
  • 所以线程B也开始创建newInstance 的实例,这样一来线程A和线程B都创建了newInstance的实例,单例失败。

 

转载于:https://www.cnblogs.com/shyroke/p/8917226.html

你可能感兴趣的文章
TensorFlow+实战Google深度学习框架学习笔记(10)-----神经网络几种优化方法
查看>>
SECTION 4: THE TIMEQUEST GUI
查看>>
window's chkdsk
查看>>
WCF序列化
查看>>
Host+DLL模式下快捷键的使用
查看>>
notepad++添加Compare插件
查看>>
[游戏学习22] MFC 井字棋 双人对战
查看>>
Qt中的qreal
查看>>
Codeforces Beta Round #95 (Div. 2) D.Subway
查看>>
企业搜索引擎开发之连接器connector(二十)
查看>>
HeadFirst Jsp 09 (JSTL)
查看>>
jquery版小型婚礼(可动态添加祝福语)
查看>>
Centos5.8 安装 PHP5.5 和 memcached
查看>>
第25周六
查看>>
[转]CENTOS LINUX安装并使用NFS共享文件
查看>>
Android AES加密算法及其实现
查看>>
Entity Framework公共的增删改方法
查看>>
hdu1698 Just a Hook 线段树:成段替换,总区间求和
查看>>
dorado spring知识补充
查看>>
Android -- ViewPager、Fragment、状态保存、通信
查看>>