Double Check Locking 双检查锁机制

方法保证了多线程并发下的线程安全性。
这里在声明变量时使用了volatile关键字来保证其线程间的可见性;在同步代码块中使用二次检查,以保证其不被重复实例化。集合其二者,这种实现方式既保证了其高效性,也保证了其线程安全性。

 1 package com.test;
 2 
 3 public class MyObject{
 4     volatile private static MyObject instance;
 5 
 6     private MyObject() {
 7     }
 8 
 9     public static MyObject getInstance() { // 对获取实例的方法进行同步
10         try {
11             if (instance == null) {
12                 synchronized (MyObject.class) {
13                     if (instance == null) {
14                         instance = new MyObject();
15                     }
16                 }
17                  System.out.println(instance);
18             }
19         } catch (Exception e) {
20             e.printStackTrace();
21         }
22         return instance;
23     }
24 }
View Code

 

posted on 2017-05-13 11:07  祥昊  阅读(718)  评论(0编辑  收藏  举报

导航