1. 程式人生 > >單例模式之靜態內部類實現

單例模式之靜態內部類實現

這些天在看一本書,關於java多執行緒的,系統的掌握了多執行緒的一些知識,就簡單的把一些學習重要的知識記錄下來。

DCL可以解決多執行緒單例模式的非執行緒安全問題,當然也可以用其他方式,這裡就說另一種用內部類實現的。

如下程式碼:

package test;

public class MyObject {

	// 內部類方式
	private static class MyObjectHandler {
		private static MyObject myObject = new MyObject();
	}

	private MyObject() {
	}

	public static MyObject getInstance() {
		return MyObjectHandler.myObject;
	}

}

這種方法首先是一個靜態內部類,並且是私有的,只能通過getInstance()來獲得,

並且由類中成員變數載入方式,類成員最先被載入,並且不受例項變數影響。

另一方面,MyObject的構造方法是私有的,故只能內部實現。

一段測試程式碼:

package test.run;

import test.MyObject;

public class Run {

	class MyThread extends Thread {

		@Override
		public void run() {
			System.out.println(MyObject.getInstance().hashCode());
		}

	}
	
	public static void main(String[] args) {
		Run.MyThread t1 = new Run().new MyThread();
		Run.MyThread t2 = new Run().new MyThread();
		Run.MyThread t3 = new Run().new MyThread();
		

		t1.start();
		t2.start();
		t3.start();

	}

}

執行結果: