原文地址: http://forestqqqq.iteye.com/blog/1896723
一,饿汉式单例
- //饿汉式单例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
- }