美文网首页Java
Java中的单例

Java中的单例

作者: hypercode | 来源:发表于2022-07-21 10:45 被阅读0次
/*单例类(饿汉模式)*/
public class Singleton {
    //step2自行对外提供实例
    private static final Singleton singleton = new Singleton();
    //step1构造函数私有化
    private Singleton(){}
    //step3提供外界可以获得该实例的方法

    public static Singleton getSingleton() {
        return singleton;
    }
}

/*单例模式的懒汉模式,普通懒汉模式有线程问题,需要加synchronized,添加synchronized锁虽然可以保证线程安全,
但是每次访问getInstance()方法的时 候,都会有加锁和解锁操作,同时synchronized锁是添加在方法上面,锁的范围过大,而 单例类是全局唯一的,锁的操作会成为系统的瓶颈。
因此,需要对代码再进行优化,由此引出了“双重校验锁”的方式*/
class Singleton{
    private static Singleton singleton = null;
    private Singleton (){}
    public static synchronized Singleton getSingleton() {
        if (null == singleton){
            singleton = new Singleton();
        }
        return singleton;
    }
}

/*双重校验锁(会出现指令重排问题)什么是指令重排问题请百度*/
class Singleton{
    private static Singleton singleton = null;
    private Singleton (){}
    public static Singleton getSingleton() {
        if (null == singleton){
            synchronized (Singleton.class){
                if (null == singleton){
                    singleton = new Singleton();
                }
            }
        }
        return singleton;
    }
}

/*双重校验锁(volatile解决指令重排问题)*/
class Singleton{
    private static volatile Singleton singleton = null;
    private Singleton (){}
    public static Singleton getSingleton() {
        if (null == singleton){
            synchronized (Singleton.class){
                if (null == singleton){
                    singleton = new Singleton();
                }
            }
        }
        return singleton;
    }
}


/*
静态内部类单例模式(推荐用法)
* */
class __Singleton{
    //2:私有的静态内部类,类加载器负责加锁
    private static class SingletonHolder{
        private static __Singleton singleton = new __Singleton();
    }
    //1.私有化构造方法
    private __Singleton(){}
    
    public static __Singleton getInstance(){
        return SingletonHolder.singleton;
    }
}

相关文章

  • Java中单例模式你用的哪一种?

    一起讨论java中的单例模式。单例模式是java设计模式中算是最简单的设计模式了。 * java实现单例模式的写法...

  • Java四种单例设计模式

    Java中的四种单例模式 单例模式是最容易理解的设计模式之一,介绍Java中单例模式的四种写法。 1.基本单例模式...

  • 单例模式

    JAVA设计模式之单例模式 十种常用的设计模式 概念: java中单例模式是一种常见的设计模式,单例模式的写法...

  • 单例模式

    3、单例模式(Singleton) 单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象...

  • JAVA基础之单例

    JAVA单例的几种形式以及其优缺点。 Android 中的单例模式 - 简书 单例的定义:Singleton模式的...

  • Android 架构5 设计模式之单例模式

    前言 Java中单例(Singleton)模式是一种广泛使用的设计模式。单例模式的主要作用是保证在Java程序中,...

  • Java单例模式以及与静态方法的一些区别

    Java单例模式说明: 在Java中单例模式分为两种:1.饿汉式单例:在定义实例以供外部使用的时候直接实例化对象,...

  • 关于java单例模式,这篇已经讲得很清楚了,建议收藏!

    概念 java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。 特点 单例...

  • 浅谈单例模式

    如有错误还望指正!!! Java单例模式说明: 在Java中单例模式分为两种:1.饿汉式单例:在定义实例以供外部使...

  • 设计模式-单例模式(Singleton)

    单例模式(Singleton) 单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保...

网友评论

    本文标题:Java中的单例

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