/**
* 单例:饿汉式
*/publicclassPerson{// 构造函数私有化privatePerson(){}// 创建唯一实例privatestatic Person person =newPerson();// 提供获取唯一实例方法publicstatic Person getPerson(){return person;}}
上来就创建实例,如果该实例从始至终没有被用过,则会造成内存的浪费。
基本懒汉式
/**
* 单例:懒汉式
*/publicclassPerson{// 构造函数私有化privatePerson(){}// 声明对象,不创建privatestatic Person person = null;// 调用到下面的方法时,说明要用到类的实例publicstatic Person getPerson(){// 创建实例if(person == null){
person =newPerson();}return person;}}
/**
* 单例:双重检测机制(DCL)懒汉式
*/publicclassPerson{// 构造函数私有化privatePerson(){}privatestaticvolatile Person person = null;publicstatic Person getPerson(){if(person == null){// 将锁的范围缩小synchronized(Person.class){// 再次判空if(person == null){
person =newPerson();}}}return person;}}
/**
* 单例:静态内部类懒汉式
*/publicclassPerson{// 构造函数私有化privatePerson(){}// 使用静态内部类加载privatestaticclassLoader{// 创建单例对象privatestaticfinal Person person =newPerson();}// 获取对象publicstaticfinal Person getInstance(){return Loader.person;}}