懒汉模式线程不安全:
package com.ddy.singleton;
public class Singleton {
	private static Singleton instance;
	
	private Singleton(){
		
	}
	public static Singleton getInstance(){
		if(instance == null){
			instance = new Singleton();
		}
		return instance;
	}
}
 
package com.ddy.singleton;
public class Service1 implements Runnable {
	private Singleton singleton = null;
	//public Set<Singleton> singles = new HashSet<>();  
	@Override
	public void run() {
		// TODO Auto-generated method stub
		singleton = Singleton.getInstance();
		System.out.println(singleton+","+Thread.currentThread().getName());
	}
}
 
package com.ddy.singleton;
public class Test {
	public static void main(String[] args) throws InterruptedException {
		Service1 t1 = new Service1();
		Service1 t2 = new Service1();
		new Thread(t1).start();
		new Thread(t2).start();
	}
}
 
输出结果不一致 ,说明线程不安全
修改如下:
package com.ddy.singleton;
public class Singleton {
	private static Singleton instance;
	
	private Singleton(){
		
	}
	public static Singleton getInstance(){
		if(instance == null){
			synchronized (Singleton.class){
				if (instance == null) {                 //Double Checked
	                instance = new Singleton();
	            }
			}
		}
		return instance;
	}
}
这样就做到线程安全了
 
单例模式 懒汉模式
原文:http://www.cnblogs.com/vincent4code/p/5935295.html