实现线程安全的单例模式

author author     2022-09-16     692

关键词:

一、双检查锁机制

package singleton;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 双检查锁机制--单例模式
 * Created by daizengjie on 2017/8/29.
 */
public class MySingleton {

    private static final Logger logger = LoggerFactory.getLogger(MySingleton.class);

    //使用volatile关键字会强制将修改值写入主存
    //并发三要素:原子性(synchronized,Lock)、可见性(volatile)、有序性(重排序,happens-before原则,valotile)

    //Lock lock = new ReentrantLock()
    //lock.lock()
    //lock.unlock()   try..finally..

    volatile private static MySingleton instance = null;

    private MySingleton(){}

    public static MySingleton getInstance(){
        try {
            if(instance != null){//懒汉式

            }else{
                //准备性耗时
                Thread.sleep(300);
                synchronized (MySingleton.class){
                    if(instance == null){//二次检查
                        instance = new MySingleton();
                    }
                }
            }
        } catch (InterruptedException e) {
            logger.error(e.getMessage());
        }

        return instance;
    }
}

二、内部类实现

package singleton;

import java.io.ObjectStreamException;
import java.io.Serializable;

/**
 * 内部类实现单例模式
 * 反序列化与序列化前,需要同一个实例
 * Created by daizengjie on 2017/8/29.
 */
public class InnerClassSingleton implements Serializable{

    private static final long serialVersionUID = 1L;

    //内部类
    private static class MySingletonHandler{
        private static InnerClassSingleton instance = new InnerClassSingleton();
    }

    private InnerClassSingleton(){}

    public static InnerClassSingleton getInstance(){
        return MySingletonHandler.instance;
    }

    //反序列化之前会被调用
    protected Object readResolve() throws ObjectStreamException{
        return MySingletonHandler.instance;
    }
}

 

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

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

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

...一个对象,不能new多个对象。比如:单例模式的两种经典实现单例模式中有两个典型实现:饿汉模式懒汉模式我们来通过一个生活上的例子来给大家讲讲什么是饿汉模式,什么是懒汉模式。 但是在计算机中,普遍认为懒汉模式... 查看详情

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

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

线程安全的单例模式的几种实现

...种常见的设计模式;JavaSingleton模式就为我们提供了这样实现的可能。使用Singleton的好处还在于可以节省内存,因为它限制了实例的个数,有利于Java垃圾回收(garbagecollection)。 单例模式也是一种比较常见的设计模式,它到... 查看详情

线程安全的单例模式

...没用到它,就非常耗费资源。 2. 经典的单例模式实现:Java代码publicclassSingleton{//用一个静态变量来记录Singleton类的唯一实例privatestaticSingletonuniqueInstance;privateSingleton(){}//注意这个方法也是静 查看详情

dcl双检查锁机制实现的线程安全的单例模式

publicclassMyObject{privatevolatilestaticMyObjectmyObject;privateMyObject(){}publicstaticMyObjectgetInstance(){try{if(myObject!=null){}else{Thread.sleep(3000);synchronized(MyObject.class){if(myObject= 查看详情

高并发下线程安全的单例模式

...目开发中最为常见的设计模式之一,而单例模式有很多种实现方式,你是否都了解呢?高并发下如何保证单例模式的线程安全性呢?如何保证序列化后的单例对象在反序列化后任然是单例的呢?这些问题在看了本文之后都会一一... 查看详情

c++的单例模式与线程安全单例模式(懒汉/饿汉)

...单例模式  我们都很清楚一个简单的单例模式该怎样去实现:构造函数声明为private或protect防止被外部函数实例化,内部保存一个privatestatic的类指针保存唯一的实例,实例的动作由一个public的类方法代劳,该方法也返回单例类... 查看详情

怎么实现一个线程安全的单例模式

...的,单例模式是考的最多的。线程安全的单例还有很多种实现方法。可以使用静态内部类、双重校验锁、静态代码块等。1、饿汉式public class Singleton()    private static Singleton instance = new ... 查看详情

线程安全的单实例模式

我们都很清楚一个简单的单例模式该怎样去实现:构造函数声明为private或protect防止被外部函数实例化,内部保存一个privatestatic的类指针保存唯一的实例,实例的动作由一个public的类方法代劳,该方法也返回单例类唯一的实例。... 查看详情

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

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

iodh实现的单例模式

饿汉式单例类不能实现延迟加载,不管将来用不用始终占据内存;懒汉式单例类线程安全控制烦琐,而且性能受影响。有种更好的单例模式叫做InitializationDemandHolder(IoDH)的技术。 publicclassSingleton{privateSingleton(){System.out.println(Si... 查看详情

java基础——线程安全的单例模式懒汉式

packagesavesingleton;/*使用同步将单例模式中的懒汉式改写成线程安全的@authorzsben@create2020-01-0322:22*/classBank{privateBank(){}privatestaticBankinstance=null;/*publicstaticsynchronizedBankgetInstance(){if(instance==null){ 查看详情

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

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

多线程下的单例模式

...目开发中最为常见的设计模式之一,而单例模式有很多种实现方式,你是否都了解呢?高并发下如何保证单例模式的线程安全性呢?如何保证序列化后的单例对象在反序列化后任然是单例的呢?这些问题在看了本文之后都会一一... 查看详情

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

...安全问题。若获取  实例方法加synchronized关键字,则能实现线程同步解决线程安全问题,但是多线程下频繁调用会造成巨大的性能开销。    1、双重检查锁及其错误根源      双重检查锁是常见的延迟初始化技术... 查看详情

单例模式

...单例模式3.多线程安全的单例模式4.模版类的单例模式的实现 1. 由单例模式中关于static的问题:“静态成员函数调用了非静态成员函数(构造函数)”最简单的单例模式如下:1classSingleton{2private:3Singleton(){};4~Singleton(){};5public:... 查看详情

单例模式(下)特殊单例的实现(代码片段)

...式。”常见的有线程的单例,进程的单例(一般默认实现),多进程的单例。 实现线程唯一的单例“进程唯一”指的是进程内唯一,进程间不唯一。类比一下,“线程唯一”指的是线程内唯一,线程间 查看详情