DoubleCheck的幾種方法總結
第一種:非延遲載入單例類
public class Singleton {
private Singleton() {}
private static final Singleton instance = new Singleton();
public static Singleton getInstance() {
return instance;
}
}
第二種:同步延遲載入
public class Singleton { private static Singleton instance = null; private Singleton() {} public static synchronized Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }
第三種:雙重檢測同步延遲載入
為處理原版非延遲載入方式瓶頸問題,我們需要對 instance 進行第二次檢查,目的是避開過多的同步(因為這裡的同步只需在第一次建立例項時才同步,一旦建立成功,以後獲取例項時就不需要同獲取鎖了),instance為volatile則可行:
public class Singleton { private volatile static Singleton instance = null; private Singleton() {} public static Singleton getInstance() { if (instance == null) { synchronized (Singleton.class) {// 1 if (instance == null) {// 2 instance = new Singleton();// 3 } } } return instance; } }
這裡是主要是要理解為什麼要使用volatile修飾變數才行,是因為:
volatile變數規則:對一個變數的寫操作先行發生於後面對這個變數的讀操作,所以才不會出現物件還在建立就被其他執行緒拿去使用的情況,其他執行緒都會得到一個建立好的物件
第四種:使用內部類實現延遲載入
public class Singleton { private Singleton() {} private static class Holder { private static Singleton instance = new Singleton(); } public static Singleton getInstance() { // 外圍類能直接訪問內部類(不管是否是靜態的)的私有變數 return Holder.instance; } }
相關推薦
DoubleCheck的幾種方法總結
第一種:非延遲載入單例類 public class Singleton { private Singleton() {} private static final Singleton instance = new Singleton(); public s
JS刷新當前頁面的幾種方法總結
onu navigate mman reload 存在 .exe time 通過 復制代碼 reload 方法,該方法強迫瀏覽器刷新當前頁面。語法:location.reload([bForceGet])
laravel安裝的幾種方法總結
php laravel 安裝 Laravel安裝方法大的來分可以分為利用Composer安裝和一鍵安裝包安裝。先來說一下最簡單的安裝方式,利用一鍵安裝包來安裝Laravel。為了方便初學者學習Laravel有大神在網上提供了一鍵安裝包(下載網址:http://www.golaravel.com/d
優化MySQL性能的幾種方法-總結
big 計算 保持 失敗 優化mysql sql one div 另一個 原文:http://bbs.landingbj.com/t-0-245601-1.html 1、要選取最適用的字段屬性 MySQL可以很好的支持大數據量的存取,但是一般說來,數據庫中的表越
生成下拉框的幾種方法總結——數據來源:枚舉
ati state 數據集 equal type() tty each 其中 sele 上節介紹數據來源是數據庫,這節介紹對枚舉進行數據獲取,形成下拉列表。 使用場景:某些狀態值獲取等,一般是數據量小,不需要在數據庫中進行維護的數據集 1、前提要有枚舉數據
js 刪除陣列中某一項的幾種方法總結
第一種:改變原陣列 借用原生陣列方法:splice(index,len,[item]) 剪接 借用原生物件方法:delete array[index] + array.slice(0, index).concat(array.slice(index, array.length-1))
防止表單重複提交的幾種方法總結
版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/Warpar/article/details/72917924 1、JavaScript防止表單重複提交(主要用於網路延遲情況下使用者點選多次submit按鈕導致表單重複提
C++中函式返回陣列指標的幾種方法總結
因為陣列不能被拷貝,所以函式不能返回陣列。不過,函式可以返回陣列的指標或引用。返回陣列指標的方法有以下幾種: 1、方法一:使用類型別名。如下 typedef int arrt[10];//arrT是一個類型別名,它表示的型別是含有10個整數的陣列
資料庫sql優化的幾種方法總結
在sql查詢中為了提高查詢效率,我們常常會採取一些措施對查詢語句進行sql優化,下面總結的一些方法,有需要的可以參考參考。 1.對查詢進行優化,應儘量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索引。 2.應儘量避免在 wher
[組合數]求組合數的幾種方法總結
求C(n,m)%mod的方法總結 1.當n,m都很小的時候可以利用楊輝三角直接求。 C(n,m)=C(n-1,m)+C(n-1,m-1); 2.利用乘法逆元。 乘法逆元:(a/b)%mod=a*(b^(mod-2)) mod為素數。 逆元可以利用擴
微信小程式 傳值取值的幾種方法總結,百分百會用到
微信小程式 傳值取值 小程式裡常見的取值有以下幾種,一個完整的專案寫下來,用到的概率幾乎是100%。 列表index下標取值 頁面傳值 form表單取值 列表index下標取值 實現方式是:data-index=”{{index}}”挖坑及e.cu
Java中遍歷Map的幾種方法總結
方法一 在for-each迴圈中使用entries來遍歷 這是最常見的並且在大多數情況下也是最可取的遍歷方式。在鍵值都需要時使用。 Map<Integer, Integer> map = new HashMap<Integer, Integer>
Servlet跳轉頁面的幾種方法總結
servlet跳轉頁面的方法: 跳轉分為兩部分,一部分發生在servlet,另一部分發生在JSP,JSP就是servlet,但是兩者還是有部分差異。 Servlet:(跳轉發生在doGet,doPost等方法裡) (1)redirect方式
關於圖片拉伸的幾種方法總結
系統至ios6之後,關於圖片拉伸的方法已經擴充套件至3個函式: 1.ios4提供的方法: - (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInt
Linux執行緒同步機制的幾種方法總結與對比
執行緒同步機制的幾種方法總結與對比 需要執行緒同步的原因: 當有多個執行緒同時訪問一個共享記憶體裡面的變數時,有時會出現一個執行緒正在修改該變數的值,而其他的執行緒正在讀取資料,可能就會導致錯誤。
python獲取命令列引數的幾種方法總結
第一種是利用sys.argv模組 import sys print sys.argv 輸出整個命令列,以list的格式,所以有時候可以通過判斷這個list的長度來判斷是否有引數值輸入。 print sys.argv[0] print sys.argv[1] prin
php頁面傳遞引數值幾種方法總結
又搞了一個學期的php,就這樣吧。 php是一種伺服器的指令碼語言,他也是現在最為流行的WEB開發語言,下面我們來講述一下幾種上在php開發應用中常用的四種頁面之間傳遞引數的幾種方法。 第一種:使用客戶端瀏覽器的cookie。cookie很容易理解,就是一個臨時檔案,可以把它看成一個儲藏室,瀏
Android截圖截圖的幾種方法總結
Android截圖 Android截圖的原理:獲取具體需要截圖的區域的Bitmap,然後繪製在畫布上,儲存為圖片後進行分享或者其它用途 一、Activity截圖 1、截Activity介面(包含空白的狀態列) ? 1 2 3 4
python寫入csv檔案的幾種方法總結
最常用的一種方法,利用pandas包import pandas as pd #任意的多組列表 a = [1,2,3] b = [4,5,6] #字典中的key值即為csv中列名 dataframe = pd.DataFrame({'a_name':a,'b_nam
Qt常見設定背景圖片的幾種方法總結
常用的設定背景的方式有三種: 1、利用style sheet給窗體設定背景。 2、利用Qt UI設計器的改變樣式表進行設定。如下: 3、通過如下程式碼來實現。 QPixmap pixmap