// 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;
}
}
饿汉式(静态常量):
懒汉式(双重检查锁定):
volatile关键字确保多线程环境下实例的可见性。静态内部类(推荐方式):
getInstance()时才加载内部类,从而实现懒加载和线程安全。上一篇:java 判断字符串相等
下一篇:java中json转map
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站