美文网首页
单例模式--java15(11/12/2015)

单例模式--java15(11/12/2015)

作者: Girl_endless | 来源:发表于2015-12-14 10:01 被阅读15次

设计模式:设计模式是在大量的实践中总结和理论化后优选的代码结构、编程风格、以及解决问题的思考方式。

一共有23种设计模式。

单例的设计模式:

1、解决的问题:使得一个类只能够创建一个对象。

2、如何实现?见如下四步

//饿汉式1

public class TestSingleton {

public static void main(String[] args) {

      Singleton s1 = Singleton.getInstance();

      Singleton s2 = Singleton.getInstance();

      System.out.println(s1 == s2);//true,说明这两个引用的地址是一样的

}

}

//只能创建Singleton的单个实例

class Singleton{

//1、私有化构造器,使得在类的外部不能够调用此构造器

private Singleton(){

}

//2、在类的内部创建一个类的实例

//3、私有化此对象,通过公共的方法来调用

private static Singleton instance = new Singleton();

//4、此公共的方法,只能通过类来调用,因为设置为static的,同时类的实例也必须为static声明的

public static Singleton getInstance(){

return instance;

}

}

//饿汉式2

...   ...

//2、在类的内部创建一个类的实例,与1的区别是是通过代码块实例化类的。

private static Singleton instance = null;

static {

instance = new Singleton();

}



//懒汉式:可能存在线程安全问题

public class TestSingleton1 {

public static void main(String[] args) {

Singleton1 s1 = Singleton1.getInstance();

Singleton1 s2 = Singleton1.getInstance();

System.out.println(s1 == s2);//true

}

}

class Singleton1{

//1.

private Singleton1(){

}

//2.

private static Singleton1 instance = null;

//3.

public static Singleton1 getInstance(){

if (instance == null){

instance = new Singleton1();

}

return instance;

}

}

为什么懒汉式可能存在线程安全问题?

因为假如有多个执行路径在调用getinstance()方法,当第一个执行路径由于首次执行getinstance方法,instance==null,进入if循环,但是由于当前执行的路径比较多,进行了CPU切换,该进程被挂起。另外一个执行路径开始执行,此时依旧instance==null,然后创建了instance对象(0x1111),返回instance;然后切换到第一个执行路径继续执行,便接着new一个新的对象(0x2222);但是这两个引用本身应该指向同一个对象,此时便出现线程问题。

相关文章

  • 单例模式--java15(11/12/2015)

    设计模式:设计模式是在大量的实践中总结和理论化后优选的代码结构、编程风格、以及解决问题的思考方式。 一共有23种设...

  • 单例模式

    单例模式及C++实现代码单例模式4种实现详解 c++11改进我们的模式之改进单例模式 单例模式(Singleton...

  • 设计模式之单例模式

    title: 设计模式之单例模式date: 2020-11-28 00:12:03tags: java GOF 设...

  • 【设计模式】单例模式

    单例模式 常用单例模式: 懒汉单例模式: 静态内部类单例模式: Android Application 中使用单例模式:

  • Android设计模式总结

    单例模式:饿汉单例模式://饿汉单例模式 懒汉单例模式: Double CheckLock(DCL)实现单例 Bu...

  • 2018-04-08php实战设计模式

    一、单例模式 单例模式是最经典的设计模式之一,到底什么是单例?单例模式适用场景是什么?单例模式如何设计?php中单...

  • 设计模式之单例模式详解

    设计模式之单例模式详解 单例模式写法大全,也许有你不知道的写法 导航 引言 什么是单例? 单例模式作用 单例模式的...

  • Telegram开源项目之单例模式

    NotificationCenter的单例模式 NotificationCenter的单例模式分析 这种单例模式是...

  • 单例模式Java篇

    单例设计模式- 饿汉式 单例设计模式 - 懒汉式 单例设计模式 - 懒汉式 - 多线程并发 单例设计模式 - 懒汉...

  • IOS单例模式的底层原理

    单例介绍 本文源码下载地址 1.什么是单例 说到单例首先要提到单例模式,因为单例模式是单例存在的目的 单例模式是一...

网友评论

      本文标题:单例模式--java15(11/12/2015)

      本文链接:https://www.haomeiwen.com/subject/vtmyhttx.html