推荐使用的三种无线程安全问题的单例模式(代码片段)

mars-zyt mars-zyt     2023-01-29     432

关键词:

1、饿汉式

public class Singleton        
        
    private static Singleton instance = new Singleton();        
    private Singleton()           
            
    public static Singleton getInstance()        
             return instance;         
            

2、懒汉式的双重检查锁定

public class Singleton2 
    
    private Singleton2() 
    
    private static volatile Singleton2 instance;
    
    /**
     * 双重检查加锁
     * 
     * @return
     */
    public static Singleton2 getInstance () 
        // 自旋   while(true)
        if(instance == null) //synchronized作为重量级锁,第一次实例化对象时候使用,读取的时候没必要进行代码锁定
            synchronized (Singleton2.class) 
                if(instance == null) 
                    instance = new Singleton2();  // 指令重排序
                    
                    // 申请一块内存空间   // 1
                    // 在这块空间里实例化对象  // 2
                    // instance的引用指向这块空间地址   // 3
                    //因此使用volatile防止指令重排序
                
            
        
        return instance;
    

3、内部类

public class Singleton        
    private Singleton()              
            
    private static class SingletonContainer        
        private static Singleton instance = new Singleton();        
            
    public static Singleton getInstance()        
        return SingletonContainer.instance;        
            

 

java单例模式的三种实现(线程安全)

直接上代码(代码注释比较完整):第一种:packagepattern.singleton.doublecheck;publicclassSingleton{  //私有化默认构造方法,防止外部生成此实例 privateSingleton(){}  //声明此单一实例 //volatile:能够及时通知其他线程... 查看详情

线程安全的单例模式(代码片段)

饿汉模式1publicclassSingle23privatestaticSingleinstance=newSingle();45privateSingle()6System.out.println("Single:"+System.nanoTime());789publicstaticSinglegetInstance()10returninstance;1112  查看详情

线程安全的单例模式(代码片段)

...要采用延迟初始化来降低初始化类和创建对象的开销,在使用这些对象时才进行初始化。延迟初始化需要注意线程安全  问题,否则就容易出现问题。    单例模式在获取实例的方法中,若只判断实例是否为null,是则创... 查看详情

线程安全的单例模式(代码片段)

一饿汉模式packagecom.thread;publicclassTest8publicstaticvoidmain(String[]args)MyThreadt1=newMyThread();MyThreadt2=newMyThread();MyThreadt3=newMyThread();t1.start();t2.start();t3.start();classMyObjectp 查看详情

设计模式---单例模式(代码片段)

...全的写法优缺点线程安全,同步锁---效率低,不推荐优缺点线程安全,同步代码块---无法解决线程安全问题,不推荐优缺点双重检查---解决线程安全和懒加载问题--推荐使用优缺点静态内部类---可以实现懒加载,线... 查看详情

多线程阻塞队列定时器线程安全的单例模式的原理及实现(代码片段)

文章目录1.线程安全版本的单例模式1.1单例模式介绍1.2实现线程安全版本的懒汉模式2.阻塞队列2.1阻塞队列介绍2.2标准库中的阻塞队列2.3实现阻塞队列2.4生产者消费者模型3.定时器3.1定时器介绍3.2标准库中的定时器3.3实现定时器1.... 查看详情

多线程阻塞队列定时器线程安全的单例模式的原理及实现(代码片段)

文章目录1.线程安全版本的单例模式1.1单例模式介绍1.2实现线程安全版本的懒汉模式2.阻塞队列2.1阻塞队列介绍2.2标准库中的阻塞队列2.3实现阻塞队列2.4生产者消费者模型3.定时器3.1定时器介绍3.2标准库中的定时器3.3实现定时器1.... 查看详情

多线程实现单例模式(饿汉懒汉)实现线程安全的单例模式(双重效验锁)(代码片段)

...比饿汉模式好。主要因为懒汉模式的效率更高1.饿汉模式(线程安全)//饿汉模 查看详情

单例模式(代码片段)

...线程工作/***懒汉式,lazyloading明显,线程不安全,无法多线程使用*/publicclassSinglePatternprivatestaticSinglePatternsinglePattern;publicstaticSinglePatterngetInstance()if(singlePattern==null)singlePattern=newSinglePattern();returnsinglePattern; 第二种懒汉式,线程安全,... 查看详情

5种常见的单例模式(代码片段)

1.懒汉式(使用时构建对象)  1.1版本1:直接私有化构造函数。       缺点:非线程安全,当多个线程同时运行到if(instance==null)时,会创建多个对象。1publicclassSingleton2privatestaticSingletoninstance;3privateSingleton()456publicstatic... 查看详情

5java单例模式(线程安全性)(代码片段)

java中的单例模式是一种广泛使用的设计模式。单例模式的主要作用是保证在java程序中,某个类只有有一个实例存在单例模式1、饿汉模式publicclassSingletonprivatestaticSingletoninstance=newSingleton();privateSingleton()publicstaticSingletonnewIns... 查看详情

linux线程池|线程安全的单例模式|stl智能指针与线程安全|读者写者问题(代码片段)

...#xff0c;以提高效率。什么是线程池线程池:一种线程的使用模式(以空间换时间的形式)。线程过多会带来调度开销,进而影响缓存局部性和整体性能。 查看详情

设计模式总结:单例模式(代码片段)

...序运行期间一个类只有一个实例,并提供一个全局访问点推荐访问我的个人网站,排版更好看呦:https://chenmingyu.top/design-singleton/什么是单例模式单例模式目的是保证在程序运行期间一个类只有一个实例,并提供一个全局访问点... 查看详情

最完美的单例模式(代码片段)

...择是饿汉式和双重检查懒汉式。最完美的是EffectiveJava中推荐的enum方式1、恶汉式:   类加载到内存中,就实例化一个单例,JVM保证线程安全,简单实用   一个小缺点:无论用到与否,类加载时就完成实... 查看详情

java实现线程安全的单例模式

一、平时使用的软件中,例如回收站、线程池、文件系统等,都只有一个实例,这些都是单例模式的典型应用。  单例模式:确保某个类只有一个实例,并提供一个全局访问点来访问这个实例。  单例模式有三个要点:  ... 查看详情

单例模式的三种写法

第一种,懒汉模式,没考虑线程安全publicclassSingleton{privatestaticSingleton_instance=null;privateSingleton(){}publicstaticSingletonCreateInstance(){if(_instance==null){_instance=newSingleton();}return_instance;}}第二种, 查看详情

多线程下的单例模式详解(代码片段)

...实例化,从而向系统提供该实例化的对象单例模式的使用场景整个程序的运行中只允许有一个类的实例需要频繁实 查看详情

简单的单例模式其实也不简单(代码片段)

...果要深究,小小的单例模式可以牵扯到很多东西,比如多线程是否安全,是否懒加载,性能等等。还有你知道几种单例模式的写法呢?如何防止反射破坏单例模式?今天,我就花一章内容来说说单例模式。关于单例模式的概念,... 查看详情