Java多线程之单例模式(线程安全)

时间:2023-03-09 18:05:57
Java多线程之单例模式(线程安全)
 package org.study2.javabase.ThreadsDemo.sync;

 /**
* @Auther:GongXingRui
* @Date:2018/9/20
* @Description: 单例模式 - 二次确认,提高效率
**/
public class DanDemo {
public static void main(String args[]) {
Dan dan1 = new Dan();
Dan dan2 = new Dan();
dan1.start();
dan2.start();
}
} class Dan extends Thread {
@Override
public void run() {
System.out.println(JVM.getInstance());
} } /**
* 单例模式 - 懒汉式
*/
class JVM {
private static JVM instance = null; private JVM() { } // 二次确认提高效率
public static JVM getInstance() {
if (null == instance) { // 提高效率
synchronized (JVM.class) {
if (null == instance) { // 安全
instance = new JVM();
}
}
}
return instance;
} public static JVM getInstance2() {
synchronized (JVM.class) {
if (null == instance) {
instance = new JVM();
}
}
return instance;
} public static synchronized JVM getInstance1() {
if (null == instance) {
instance = new JVM();
}
return instance;
}
} /**
* 单例模式 - 饿汉式
* 线程安全
*/
class JVM2 {
private static JVM2 instance = new JVM2(); private JVM2() { } public static JVM2 getInstance() {
return instance;
}
}