Java 多執行緒學習筆記(十一) 單例設計模式(延遲載入/懶漢模式)DCL解決執行緒安全問題
阿新 • • 發佈:2019-01-16
package extthread;
import test.MyObject;
public class MyThread extends Thread {
@Override
public void run() {
System.out.println(MyObject.getInstance().hashCode());
}
}
package test; public class MyObject { private volatile static MyObject myObject; private MyObject() { } // 使用雙檢測機制來解決問題 // 即保證了不需要同步程式碼的非同步 // 又保證了單例的效果 public static MyObject getInstance() { try { if (myObject != null) { } else { // 模擬在建立物件之前做一些準備性的工作 Thread.sleep(3000); synchronized (MyObject.class) { if (myObject == null) { myObject = new MyObject(); } } } } catch (InterruptedException e) { e.printStackTrace(); } return myObject; } // 此版本的程式碼稱為: // 雙重檢查Double-Check Locking }
package test.run;
import extthread.MyThread;
public class Run {
public static void main(String[] args) {
MyThread t1 = new MyThread();
MyThread t2 = new MyThread();
MyThread t3 = new MyThread();
t1.start();
t2.start();
t3.start();
}
}
單例設計模式DCL雙檢查鎖機制
執行結果: 322722178 322722178 322722178