3单例静态模式+Runtime

package xidian.lili.thread.syn;
/**
 1.创建单例模式(懒汉式)
  构造器私有化  确保外部不能创建对象
  创建私有静态变量
  创建对外的公共静态方法 创建对象访问私有静态变量 
 */
public class MyJvm {
private static MyJvm jvm;
private MyJvm(){

}
public static MyJvm getInstance3() throws InterruptedException{
//双重检查
if(jvm==null){//如果已经有对象 线程都不在等待  没有对象在进去
synchronized(Jvm.class){//同步快 不能this对象  静态方法中没有this对象 放入类的字节码信息 效率低
if(jvm==null){
jvm=new MyJvm();
}
}
}
return jvm;
}
}
/**
 饿汉式 创建单例模式 
  构造器私有化  确保外部不能创建对象
  创建私有静态变量+创建对象
  创建对外的公共静态方法 访问私有静态变量 
 *
 */
class MyJvm2 {
//由于是静态方法 类加载时就会创建对象  线程安全  可是效率低   没有使用该类对象就创建了 所以改进
private static MyJvm2 jvm=new MyJvm2();
private MyJvm2(){

}
public synchronized static MyJvm2 getInstance() throws InterruptedException{
return jvm;
}
}
class MyJvm3{
//加入内部类进行包裹
//加载了MyJvm3  不会加载MyJvmhold  只有在使用的时候  比如调用getInstance() 方法在加载创建对象
//加载类时属性会被初始化  方法不会
private static class MyJvmhold{
private static MyJvm3 jvm=new MyJvm3();
}
private MyJvm3(){

}
public synchronized static MyJvm3 getInstance() throws InterruptedException{
return MyJvmhold.jvm;
}
}
/**
在jdk里的单例设计模式Runtime 饿汉式
public class Runtime {
private static Runtime currentRuntime = new Runtime();//属性创建对象
//公开访问对象
public static Runtime getRuntime() {
    return currentRuntime;
}
//构造方法私有化
private Runtime() {}
*/

猜你喜欢

转载自blog.csdn.net/wangdongli_1993/article/details/80972188