高并发下的单例模式:
使用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();
}
}
}