`

多线程的2种单例模式写法

 
阅读更多
package com.bjsxt.base.conn011;

/**
 * 多线程单列 第一种写法,最简单。
 * @author Administrator
 *
 */
public class InnerSingleton {
	
	private static class Singletion {
		private static Singletion single = new Singletion();
	}
	
	public static Singletion getInstance(){
		return Singletion.single;
	}
	
}

 

package com.bjsxt.base.conn011;

/**
 * @author Administrator
 *多线程单列模式第二种写法,两个if判断
 */
public class DubbleSingleton {

	private static DubbleSingleton ds;
	
	public static DubbleSingleton getDs(){
		if(ds == null){
			try {
				//模拟初始化对象的准备时间...
				Thread.sleep(3000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			synchronized (DubbleSingleton.class) {
				if(ds == null){
					ds = new DubbleSingleton();
				}
			}
		}
		return ds;
	}
	
	public static void main(String[] args) {
		Thread t1 = new Thread(new Runnable() {
			@Override
			public void run() {
				System.out.println(DubbleSingleton.getDs().hashCode());
			}
		},"t1");
		Thread t2 = new Thread(new Runnable() {
			@Override
			public void run() {
				System.out.println(DubbleSingleton.getDs().hashCode());
			}
		},"t2");
		Thread t3 = new Thread(new Runnable() {
			@Override
			public void run() {
				System.out.println(DubbleSingleton.getDs().hashCode());
			}
		},"t3");
		
		t1.start();
		t2.start();
		t3.start();
	}
	
}

 

package com.bjsxt.base.conn011;
//普通的单列模式多个线程会创建多个对象
public class Singleton {
	
	private static Singleton s = null;
	private void Singleton(){
	}
	public static Singleton getS(){
		if(s == null){
			try {
				//模拟初始化对象的准备时间...
				Thread.sleep(1);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			s = new Singleton();
		}
		return s;
	}
	public static void main(String[] args) {
		new Thread(new Runnable() {
			
			@Override
			public void run() {
				System.out.println(Singleton.getS().hashCode());
			}
		},"t1").start();
		new Thread(new Runnable() {
					
					@Override
					public void run() {
						System.out.println(Singleton.getS().hashCode());
					}
				},"t2").start();
		new Thread(new Runnable() {
			
			@Override
			public void run() {
				System.out.println(Singleton.getS().hashCode());
			}
		},"t3").start();
	}

}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics