單例模式之靜態內部類實現
阿新 • • 發佈:2018-12-26
這些天在看一本書,關於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(); } }
執行結果: