一、懒汉式单例
/**
* @FileName Preson.java
* @Description: //懒汉式单例类.在第一次调用的时候实例化自己
*
* @Date
* @author
* @version 1.0
*
*/
public class Preson {
private Preson(){}
private static Preson preson = null;
/**
* @Title: getInstance 静态工厂方法
* @Description:线程不安全
* @return
* @author
* @date 2016年2月18日
*/
public static Preson getInstance() {
if (preson == null) {
preson = new Preson();
}
return preson;
}
/**
* @Title: getInstance1 静态工厂方法
* @Description:在方法上加上同步,线程安全
* @return
* @author
* @date
*/
public static synchronized Preson getInstance1() {
if (preson == null) {
preson = new Preson();
}
return preson;
}
/**
* @Title: getInstance2 静态工厂方法
* @Description:双重检查锁定,线程安全
* @return
* @author
* @date
*/
public static Preson getInstance2() {
if (preson == null) {
synchronized (Preson.class) {
if (preson == null) {
preson = new Preson();
}
}
}
return preson;
}
/**
* 静态内部类
*/
private static class LazyHolder {
private static final Preson INSTANCE = new Preson();
}
/**
* @Title: getInstance3 静态工厂方法
* @Description:
* @return
* @author
* @date
*/
public static final Preson getInstance3() {
return LazyHolder.INSTANCE;
}
}
二、饿汉式单例
/**
* @FileName Preson.java
* @Description: //饿汉式单例类.在类初始化时,已经自行实例化
*
* @Date
* @author
* @version 1.0
*
*/
public class Preson {
private Preson() {}
private static final Preson person = new Preson();
//静态工厂方法
public static Preson getInstance() {
return person;
}
}