两种单例模式

1.单例模式分为两种,饿汉模式和懒汉模式.以下是饿汉模式:

java 复制代码
public class SingleTonHungry {
    private static SingleTonHungry singleTonHungry = new SingleTonHungry();
    private SingleTonHungry() {

    }
    public static SingleTonHungry getInstance() {
        return singleTonHungry;
    }
}

2.懒汉模式下,需要考虑多线程安全问题,首先是使用synchronized加锁,然后是使用双if判断是否存在实例,最后需要使用volatile保证内存可见性和指令重排序问题.

java 复制代码
public class SingleTonLazy {
    private static volatile SingleTonLazy singleTonLazy = null;

    private static Object lock = new Object();

    private SingleTonLazy() {

    }

    public static SingleTonLazy getInstance() {
        if (singleTonLazy == null) {
            synchronized (lock) {
                if (singleTonLazy == null) {
                    singleTonLazy = new SingleTonLazy();
                }
            }
        }
        return singleTonLazy;
    }
}
相关推荐
胚芽鞘6813 小时前
关于java项目中maven的理解
java·数据库·maven
岁忧4 小时前
(LeetCode 面试经典 150 题 ) 11. 盛最多水的容器 (贪心+双指针)
java·c++·算法·leetcode·面试·go
CJi0NG4 小时前
【自用】JavaSE--算法、正则表达式、异常
java
Hellyc5 小时前
用户查询优惠券之缓存击穿
java·redis·缓存
今天又在摸鱼5 小时前
Maven
java·maven
老马啸西风5 小时前
maven 发布到中央仓库常用脚本-02
java·maven
代码的余温5 小时前
MyBatis集成Logback日志全攻略
java·tomcat·mybatis·logback
一只叫煤球的猫6 小时前
【🤣离谱整活】我写了一篇程序员掉进 Java 异世界的短篇小说
java·后端·程序员
斐波娜娜7 小时前
Maven详解
java·开发语言·maven
Bug退退退1237 小时前
RabbitMQ 高级特性之事务
java·分布式·spring·rabbitmq