JAVA中单例模式的创建方式有:
1、懒汉式
1)构造器私有化
2)声明私有的静态对象属性
3)创建公有的静态方法供外部访问该静态对象,确保静态对象存在
public class MyJvm {
private static MyJvm instance =null;
private MyJvm() {
}
public static MyJvm getInstance() {
if(null == instance) { //提高效率 双重检查
synchronized (MyJvm.class) {
if(null==instance) { //确保多线程访问时的安全
instance = new MyJvm();
}
}
}
return instance;
}
}
2、饿汉式 (线程安全)
1)构造器私有化
2)声明私有的静态对象属性并初始化
3)创建公有的静态方法供外部访问该静态对象
class MyJvm2{
private static MyJvm2 instance = new MyJvm2();
private MyJvm2() {
}
public static MyJvm2 getInstance() { //只要外部用到MyJvm2这个类,不管外部有没有调用此方法,都会创建静态instance对 //象,因为加载类的时候就会初始化其所有属性
return instance;
}
}
3、对上述饿汉式的改进:只要外部用到MyJvm2这个类,不管外部有没有调用getInstance方法,都会创建静态instance对象,因为加载类的时候就会初始化其所有属性。为了提高效率,可定义一个内部类,在其中声明私有的静态对象属性并初始化,因为类在使用的时候才会加载,因此当外部仅仅使用MyJvm3这个类,而没有调用getInstance方法时就不会创建instance对象。
class MyJvm3{
private static class JvmHolder{ //定义一个内部类,提高效率
private static MyJvm3 instance = new MyJvm3();
}
private MyJvm3() {
}
public static MyJvm3 getInstance() { //外部如果没有调用此方法,仅仅是用到MyJvm3这个类,则不会创建instance对象。
return JvmHolder.instance;
}
}