设计模式-----Singleton单件模式

/* 1:同步一个方法可能造成程序执行效率下降100倍。。。。
2.在多任务环境下各任务间共享的标志都应该加上volatile(易变的)修饰,这是告诉JVM这个变量是易变的,每次读取他时请到主存中进行读取,不要到寄存器中读取他在主存中的备份。。因为易变嘛。。。。虽然寄存器中备份读取出来要快很多但这个易变的变量很可能被修改了...
*/

//懒汉式单件,使用双重检查 加锁机制,这个方式当然比恶汉要好,因为恶汉在创建时服务器负担重点,所以说关心性能的朋友,用懒汉的吧。。。。。
public class Singleton{
  private volatile static Simgleton s;
  
  private Singleton(){}
  
  public static Singleton getInstance(){
        if(s == null){//第一次检查
              synchronized(Singleton.class){
                 if(s == null){ //第二次检查
                        s = new Singleton();
                 }
            }
        }
       return s;
  }
}

//恶汉式太简单了。。霍霍

//head first上的问题笔记
/**
难道我不能创建一个类。把所有的方法和变量都定义成为静态的,把类直接当作一个单件?
*/
//答:静态初始化的控制权掌握在Java手中,因为初始化次序的复杂性,所有可能会有意想不到的bug存在,除非你绝对有必要使用类的单件,否则建议使用对象的单件比较保险


注意:只有一个元素的枚举也是一个单例哦,因为枚举里面的成员都是static final的

你可能感兴趣的:(设计模式,jvm)