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() {}
*/
/**
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() {}
*/