Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

java单例模式线程安全

作者:叶随雨落   发布日期:2025-12-26   浏览:71

// Java单例模式线程安全示例代码

// 1. 饿汉式(静态常量)
public class Singleton1 {
    // 类加载时就初始化实例,线程安全
    private static final Singleton1 instance = new Singleton1();

    private Singleton1() {}

    public static Singleton1 getInstance() {
        return instance;
    }
}

// 2. 懒汉式(双重检查锁定)
public class Singleton2 {
    // volatile关键字确保多线程环境下的可见性
    private static volatile Singleton2 instance;

    private Singleton2() {}

    public static Singleton2 getInstance() {
        if (instance == null) { // 第一次检查
            synchronized (Singleton2.class) {
                if (instance == null) { // 第二次检查
                    instance = new Singleton2();
                }
            }
        }
        return instance;
    }
}

// 3. 静态内部类(推荐方式)
public class Singleton3 {
    private Singleton3() {}

    // 内部类在第一次调用getInstance()时才加载,实现懒加载和线程安全
    private static class SingletonHolder {
        private static final Singleton3 INSTANCE = new Singleton3();
    }

    public static Singleton3 getInstance() {
        return SingletonHolder.INSTANCE;
    }
}

解释说明:

  1. 饿汉式(静态常量)

    • 在类加载时就创建实例,线程安全。
    • 缺点是不能实现懒加载。
  2. 懒汉式(双重检查锁定)

    • 使用volatile关键字确保多线程环境下实例的可见性。
    • 通过双重检查锁定机制来确保线程安全,同时实现懒加载。
  3. 静态内部类(推荐方式)

    • 利用Java类加载机制,在第一次调用getInstance()时才加载内部类,从而实现懒加载和线程安全。
    • 这种方式既保证了线程安全,又实现了懒加载,性能较好。

上一篇:java 判断字符串相等

下一篇:java中json转map

大家都在看

java url decode

java判断是windows还是linux

java连接数据库的代码

java date类型比较大小

java djl

ubuntu 卸载java

es java api

java list 查找

java 解压rar

java读取excel中的图片

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站