package com.lingshang.thread.info;
public class SynDemo02 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
JvmThread jt1 = new JvmThread(100);
JvmThread jt2 = new JvmThread(500);
jt1.start();
jt2.start();
}
}
class JvmThread extends Thread {
private long time;
public JvmThread() {
}
public JvmThread(long time) {
this.time = time;
}
public void run() {
System.out.println(Thread.currentThread().getName() + "---->创建"
+ Jvm.getInstance(time));
};
}
class Jvm {
private static Jvm instance = null;
private Jvm() {
}
public static Jvm getInstance(long time) {
// 双层检查 效率高
if (null == instance) {
synchronized (Jvm.class) {
if (null == instance) {
try {
Thread.sleep(time);// 延时 放大错误
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
instance = new Jvm();
}
}
}
return instance;
}
public static Jvm getInstance3(long time) {
// 效率低
synchronized (Jvm.class) {
if (null == instance) {
try {
Thread.sleep(time);// 延时 放大错误
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
instance = new Jvm();
}
return instance;
}
}
public static synchronized Jvm getInstance2(long time) {
if (null == instance) {
try {
Thread.sleep(time);// 延时 放大错误
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
instance = new Jvm();
}
return instance;
}
public static Jvm getInstance1(long time) {
if (null == instance) {
try {
Thread.sleep(time);// 延时 放大错误
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
instance = new Jvm();
}
return instance;
}
}