单例模式分懒汉模式与饿汉模式。
package com.imooc.aspect;
//懒汉模式。
public class Singleton {
private static Singleton instance;
private Singleton(){}
//线程安全写法
public static synchronized Singleton getInstance(){
if (instance==null){
instance= new Singleton();
}
return instance;
}
//线程不安全写法
// private static synchronized Singleton getInstance(){
// if (instance==null){
// instance= new Singleton();
// }
// return instance;
// }
}
//饿汉模式。线程安全
public class Singleton{
//不管怎么样,类加载时就初始化
private static Singleton singleton= new Singleton();
private Singleton(){}
private static Singleton getSingleton(){
return singleton;
}
}
用枚举:
public enum Singleton{
INSTANCE;
}
可以通过Singleton.INSTANCE来访问实例,比调用getInstance()方法简单。创建枚举默认线程安全,而且还能防止反序列化导致重新创建新的对象。