一,饿汉式单例
//饿汉式单例1
public class Singleton1 {
private static final Singleton1 instance = new Singleton1();
private Singleton1(){}
public static Singleton1 getInstance(){
return instance;
}
}
//饿汉式单例2
class Singleton{
private static class Single{
static final Singleton instance = new Singleton();
}
private Singleton(){}
public static Singleton getInstance(){
return Single.instance;
}
}
二,懒汉式单例
//懒汉式单例
public class Singleton2 {
private static Singleton2 instance = null;
private Singleton2(){}
public static synchronized Singleton2 getInstance(){
if(instance == null){
instance = new Singleton2();
}
return instance;
}
}
三,DCL双重锁检测式单例
//DCL双重锁检测式单例
public class Singleton3 {
private volatile static Singleton3 instance = null;
private Singleton3(){}
public static Singleton3 getInstance(){
if(instance == null){
synchronized(Singleton3.class){
if(instance == null){
instance = new Singleton3();
}
}
}
return instance;
}
//参考文章:http://www.ibm.com/developerworks/cn/java/j-dcl.html
}
四,登记式单例
import java.lang.reflect.Constructor;
import java.util.HashMap;
import java.util.Map;
//登记式单例
public class Singleton4 {
private static final Map<String,Singleton4> instances =
new HashMap<String,Singleton4>();
static{
Singleton4 instance = new Singleton4();
instances.put(instance.getClass().getName(), instance);
}
protected Singleton4(){}
public static synchronized Singleton4 getInstance(String name){
if(name == null){
name = Singleton4.class.getName();
}
if(instances.get(name) == null){
try {
Constructor con = Class.forName(name).getDeclaredConstructor();
con.setAccessible(true);
instances.put(name, (Singleton4)con.newInstance());
} catch (Exception e) {
e.printStackTrace();
}
}
return instances.get(name);
}
//参考文章:http://www.cnblogs.com/whgw/archive/2011/10/05/2199535.html
}