高并发下的单例模式:
使用DCL双端检锁机制 + volatile 实现:
其中 volatile 防止指令重排序!
package com.cwy.test;
/**
* 单例模式
*/
public class SingletonDemo {
private static volatile SingletonDemo instance = null ;
private SingletonDemo(){
System.out.println(Thread.currentThread().getName() + "我是无参构造!");
}
/**
* 1、synchronized
* 2、DCL(Double check lock 双端检锁机制)
* @return
*/
private static SingletonDemo getInstance (){
if(instance == null){
synchronized (SingletonDemo.class){
if(instance == null ){
instance = new SingletonDemo() ;
}
}
}
return instance ;
}
public static void main(String[] args) {
// System.out.println(SingletonDemo.getInstance() == SingletonDemo.getInstance());
// System.out.println(SingletonDemo.getInstance() == SingletonDemo.getInstance());
// System.out.println(SingletonDemo.getInstance() == SingletonDemo.getInstance());
for (int i = 1; i < 10; i++) {
new Thread(()->{
SingletonDemo.getInstance();
},String.valueOf(i)).start();
}
}
}
该博客介绍了如何在Java中使用DCL(Double Check Locking)双端检锁机制和volatile关键字实现线程安全的单例模式。在高并发环境下,这种实现方式能确保单例的正确初始化且避免指令重排序问题,保证了多线程环境下的正确性。代码示例展示了在main方法中启动多个线程调用getInstance()方法,验证单例的唯一性。
440

被折叠的 条评论
为什么被折叠?



