我也在看书的时候 看到C#的静态构造方法 也在想JAVA有没有同样的东西。
先来看一看为什么C#的静态构造方法为什么会存在
我们平常普通的做法是
但是,这样做是不能防止多线程同时调用的。
例如,有A线程,B线程同时初始化这个类
判断的时候,都能初始化到该类的对象。这就违背了单例模式的初衷。
所以,改进的方法可以是
此实例是跟该类在加载的时候就初始化出来了。
这样就有效地防止了多线程下的单例问题
先来看一看为什么C#的静态构造方法为什么会存在
我们平常普通的做法是
public class Teacher {
private static Teacher mTeacher;
private Teacher() {
}
public static Teacher getInstance() {
if (mTeacher == null) {
mTeacher = new Teacher();
}
return mTeacher;
}
}
但是,这样做是不能防止多线程同时调用的。
例如,有A线程,B线程同时初始化这个类
判断的时候,都能初始化到该类的对象。这就违背了单例模式的初衷。
所以,改进的方法可以是
public class Student {
private static Student mStudent = new Student();
private Student() {
}
public static Student getInstance() {
return mStudent;
}
}
此实例是跟该类在加载的时候就初始化出来了。
这样就有效地防止了多线程下的单例问题