Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java中四种线程安全的单例模式实现方式

Java中四种线程安全的单例模式实现方式

作者头像
HaC
发布于 2020-12-30 09:59:01
发布于 2020-12-30 09:59:01
2.9K00
代码可运行
举报
文章被收录于专栏:HaC的技术专栏HaC的技术专栏
运行总次数:0
代码可运行

第一种:饿汉模式(线程安全)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Single2 {

    private static Single2 instance = new Single2();
    
    private Single2(){
        System.out.println("Single2: " + System.nanoTime());
    }
    
    public static Single2 getInstance(){
        return instance;
    }
}

第二种:懒汉模式 (如果方法没有synchronized,则线程不安全)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Single3 {

    private static Single3 instance = null;
    
    private Single3(){
        System.out.println("Single3: " + System.nanoTime());
    }
    
    public static synchronized Single3 getInstance(){
        if(instance == null){
            instance = new Single3();
        }
        return instance;
    }
}

第三种:懒汉模式改良版(线程安全,使用了double-check,即check-加锁-check,目的是为了减少同步的开销)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Single4 {

    private volatile static Single4 instance = null;
    
    private Single4(){
        System.out.println("Single4: " + System.nanoTime());
    }
    
    public static Single4 getInstance(){
        if(instance == null){
            synchronized (Single4.class) {
                if(instance == null){
                    instance = new Single4();
                }
            }
        }
        return instance;
    }
}

第四种:利用私有的内部工厂类(线程安全,内部类也可以换成内部接口,不过工厂类变量的作用于要改为public了。)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Singleton {
    
    private Singleton(){
        System.out.println("Singleton: " + System.nanoTime());
    }
    
    public static Singleton getInstance(){
        return SingletonFactory.singletonInstance;
    }
    
    private static class SingletonFactory{
        private static Singleton singletonInstance = new Singleton();
    }
}

转自:https://www.nowcoder.com/profile/6801164/myFollowings/detail/13699402

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/09/29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
java设计模式之单例模式|单例模式之饿汉模式、懒汉模式、枚举方式|最详细的6种懒汉模式详解
概括一下ObjectOutputStream().readObject()的整个大致流程
小小鱼儿小小林
2022/10/06
1.8K0
java设计模式之单例模式|单例模式之饿汉模式、懒汉模式、枚举方式|最详细的6种懒汉模式详解
【JavaEE初阶】深入解析单例模式中的饿汉模式,懒汉模式的实现以及线程安全问题
OK啊!!!小伙伴们,在上期继小编讲解过wait和notify的使用的问题后,本期将开始实现关于开发中常用的单例模式,那么废话不多说,直接步入正题,go go go~~~;
用户11288949
2024/10/01
1480
【JavaEE初阶】深入解析单例模式中的饿汉模式,懒汉模式的实现以及线程安全问题
《23种设计模式(Java版)》| 单例模式(内附源码案例)。
所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法)。
百思不得小赵
2022/12/01
3220
《23种设计模式(Java版)》| 单例模式(内附源码案例)。
死磕GOF23之单例模式
Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides 四人合著出版了一本名为Design Patterns - Elements of Reusable Object-Oriented Software(中文译名:设计模式 - 可复用的面向对象软件元素)的书,该书首次提到了软件开发中设计模式的概念。
程序新视界
2022/05/09
3150
Java 实现单例模式的 9 种方法
因进程需要,有时我们只需要某个类同时保留一个对象,不希望有更多对象,此时,我们则应考虑单例模式的设计。
芋道源码
2019/01/09
1.2K0
7种单例模式的创建
单例设计模式是23种设计模式中最常用的设计模式之一,无论是三方类库还是日常开发几乎都有单例设 计模式的影子。单例设计模式提供了一种在多线程情况下保证实例唯一性的解决方案。单例设计模式虽然简单,但是实现方案却非常多,大体上有以下7种最常见的方式。
杨不易呀
2022/01/19
3170
7种单例模式的创建
Java实现单例模式的9种方法
因进程需要,有时我们只需要某个类同时保留一个对象,不希望有更多对象,此时,我们则应考虑单例模式的设计。
全栈程序员站长
2022/09/08
4550
c 线程安全的单例模式-C++单例模式(线程安全、内存释放)
  一、懒汉模式:即第一次调用该类实例的时候才产生一个新的该类实例,并在以后仅返回此实例。
宜轩
2022/12/29
2K0
多线程并发下的单例模式
定义: 单例模式是设计模式中最简单的形式之一。这一模式的目的是使得类的一个对象成为系统中的唯一实例。 下面通过代码分析下java中,各种单例模式写法的优缺点。 1、饿汉模式 示例1.1 public class Singleton { private Singleton() {} private static Object INSTANCE = new Object(); public static Object getInstance() { return INST
java404
2018/05/18
1.5K0
JAVA设计模式之单例模式
作者:炸斯特 出处:https://blog.csdn.net/jason0539 概念:   java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例、饿汉式单例、登记式单例。 单例模式有以下特点:   1、单例类只能有一个实例。   2、单例类必须自己创建自己的唯一实例。   3、单例类必须给所有其他对象提供这一实例。   单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对
Tanyboye
2018/07/02
4030
单例模式的几种实现方式及对比
单例模式是设计模式中最简单也是最常用的模式之一,所谓单例就是在系统中只有一个该类的实例。
编程大道
2019/09/07
7030
单例模式中的线程安全问题
所以我们在设计多线程代码的时候就必须在满足线程安全的前提下尽可能的提高任务执行的效 故: 加锁细粒度化:加锁的代码少一点,让其他代码可以并发并行的执行
终有救赎
2023/10/16
3870
单例模式中的线程安全问题
线程安全的单例模式--“饿汉“,“懒汉“
用户10921393
2024/07/19
1500
线程安全的单例模式--“饿汉“,“懒汉“
面试最常问的设计模式(一)单例模式/工厂模式/代理模式
持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第16天,点击查看活动详情
鳄鱼儿
2024/05/22
8570
面试最常问的设计模式(一)单例模式/工厂模式/代理模式
重学 Java 设计模式:实战单例模式「7种单例模式案例例模式」
在设计模式中按照不同的处理方式共包含三大类;创建型模式、结构型模式和行为模式,其中创建型模式目前已经介绍了其中的四个;工厂方法模式、抽象工厂模式、生成器模式和原型模式,除此之外还有最后一个单例模式。
小傅哥
2020/06/27
7080
重学 Java 设计模式:实战单例模式「7种单例模式案例例模式」
java多线程编程(二)一一>线程安全问题, 单例模式, 解决程线程安全问题的措施
1. 这是线程安全问题的 罪魁祸首 随机调度使⼀个程序在多线程环境下, 执行顺序存在很多的变数.
用户11305962
2024/11/21
1230
java多线程编程(二)一一>线程安全问题, 单例模式, 解决程线程安全问题的措施
图解Java设计模式之单例设计模式
1)设计模式是程序员在面对同类软件工程设计问题所总结出来的有用的经验,模式不是代码,而是某类问题的通用解决方案,设计模式(Design pattern)代码了最佳的实践。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。 2)设计模式的本质提高软件的维护性、通用性和扩展性,并降低软件的复杂度。 3)《设计模式》是经典的书,作者是Erich Gamma\Richard Helm\ Ralph Johnson和John Vlissides Design(俗称“四人组GOF”) 4)设计模式并不局限于某种语言,Java、PHP、C++都有设计模式。
海仔
2020/03/19
2810
图解Java设计模式之单例设计模式
Hi,我们再来聊一聊Java的单例吧
单例(Singleton)应该是开发者们最熟悉的设计模式了,并且好像也是最容易实现的——基本上每个开发者都能够随手写出——但是,真的是这样吗? 作为一个Java开发者,也许你觉得自己对单例模式的了解已经足够多了。我并不想危言耸听说一定还有你不知道的——毕竟我自己的了解也的确有限,但究竟你自己了解的程度到底怎样呢?往下看,我们一起来聊聊看~
Java团长
2018/08/06
3810
【云+社区年度征文】设计模式-单例模式(五种实现方法详解)
单例模式,属于创建类型的一种常用的软件设计模式。通过单例模式的方法创建的类在当前进程中只有一个实例(根据需要,也有可能一个线程中属于单例,如:仅线程上下文内使用同一个实例)。就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法)。
唔仄lo咚锵
2020/11/27
4080
OOAD-设计模式(三)之创建型设计模式(5种)
前言   前面介绍了OOAD的基础知识,现在我们来详细的说明一下GOF设计模式中的23种模式,希望大家能够学到东西! 一、工厂方法模式(Factory Method) 1.1、工厂方法模式概述   工
用户1195962
2018/01/18
8670
OOAD-设计模式(三)之创建型设计模式(5种)
推荐阅读
相关推荐
java设计模式之单例模式|单例模式之饿汉模式、懒汉模式、枚举方式|最详细的6种懒汉模式详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档