<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                [TOC] # 應用場景 系統/應用只需要一個實例對象,確保對象的唯一性。 [https://blog.csdn.net/u011499747/article/details/48194431](https://blog.csdn.net/u011499747/article/details/48194431) 雙重檢查 第一次檢查時候,沒有鎖定,看這個有沒有被實例化,有就直接返回 第二次檢查,表面是沒有初始化才第二次,鎖定,初始化,返回 # 分析 1. 不讓其他程序new該類對象,咋辦?——可以將類中的構造函數私有化。 2. 在本類中new一個對象。 3. 定義一個方法返回該對象,讓其他程序可以獲取到。之所以定義方法訪問,就是為了可控。 # 餓漢式單例模式 ~~~ public class Single { // 創建一個本類對象 private static final Single s = new Single(); // 構造函數私有化 private Single(){} // 定義一個方法返回該對象,讓其他程序可以獲取到。之所以定義方法訪問,就是為了可控 public static Single getInstance() { return s; } } ~~~ 以上我們一般稱之為**餓漢式單例模式**,單例模式有兩種不同的實現方式,下面是**懶漢式單例模式(也可稱之為延遲加載方式)** 的代碼體現 # 懶漢式單例模式 ~~~ public class Single { // 創建一個本類對象 private static /*final*/ Single s = null; // 別加final,死! // 構造函數私有化 private Single(){} // 定義一個方法返回該對象,讓其他程序可以獲取到。之所以定義方法訪問,就是為了可控 public static Single getInstance() { if (s == null) s = new Single(); return s; } } ~~~ 上面代碼還有一些瑕疵,因為在多線程并發訪問時,會出現線程安全問題。 加了同步就可以解決問題,無論是同步函數,還是同步代碼塊都行。 但是效率低了,怎么解決效率低的問題呢?可以通過if對單例對象的雙重判斷的形式來解決。 ~~~ public class Single { private static Single s = null; private Single() {} public static Single getInstance() { if(s == null) { synchronized(Single.class) { if(s == null) s = new Single(); } } return s; } } ~~~ 面試時,可能會問懶漢式與餓漢式有什么不同?答曰懶漢式的特點用于實例的延遲加載。又可能會接著問懶漢式的延遲加載有沒有問題?答曰有,如果多線程訪問時會出現安全問題。又問怎么解決呢?答曰可以加同步來解決,用同步代碼塊和同步函數都行,但是稍微有一些低效,用雙重判斷的形式能解決這個效率問題。最后可能會問加同步時,使用的鎖是哪一個?答曰該類所屬的字節碼文件對象。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看