public class Lazysingleton {
private static Lazysingleton m_instance = null;
// 私有默认构造方法,外界无法直接实例化
private Lazysingleton() {
}
// 静态工厂方法
public static Lazysingleton getInstance() throws InterruptedException {
// 延迟加载
if (m_instance == null) {
// 模拟创建对象的准备工作
Thread.sleep(3000);
m_instance = new Lazysingleton();// 初始化这个单例
}
return m_instance;
}
}
public class MyThread extends Thread {
@Override
public void run() {
try {
System.out.println(Lazysingleton.getInstance().hashCode());
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public class TestLazy1 {
public static void main(String[] args) {
MyThread t1=new MyThread();
MyThread t2=new MyThread();
MyThread t3=new MyThread();
t1.start();
t2.start();
t3.start();
}
}
问题:当代码读取到m_instance不为空,m_instance引用的对象有可能还没有完成初始化。就会出出现问题。
m_instance = new Lazysingleton();