標籤:並發 返回 定義 構造器 res catch 寫檔案 man val
運行期間有且僅有一個執行個體。(比較耗系統效能的時候用單例模式)
關鍵點:
1,一個類只有一個執行個體,只提供私人的構造器
2,它必須自行建立這個執行個體,定義了靜態該類的私人對象
3,它必須自行向整個系統提供這個執行個體,提供了一個靜態public方法
(返回建立或擷取本身的靜態私人對象)
懶漢模式:(1,加同步鎖synchronized 2,加雙重校正鎖)
在類載入時,不建立執行個體,運行調用時建立。
類載入快,運行擷取對象速度慢。
package cn.util;import java.io.IOException;import java.io.InputStream;import java.util.Properties;public class ConfigManager { private static ConfigManager configManager; private static Properties properties; private ConfigManager(){ //檔案在src下,所以可以直接寫檔案名稱 String configFile ="jdbc.properties"; properties = new Properties(); InputStream is =ConfigManager.class.getClassLoader().getResourceAsStream(configFile); try { properties.load(is); is.close(); } catch (IOException e) { e.printStackTrace(); } } //懶漢模式 線程不安全,在並發的情況下會出現多信configmanager,可以加同步鎖解決 public static synchronized ConfigManager getInstance(){ if(configManager == null){ configManager = new ConfigManager(); } return configManager; }==================================================================================== //雙重校正鎖 public static ConfigManager getInstance(){ if(configManager == null){ synchronized (configManager.class){ if(configManager == null){ configManager = new ConfigManager(); } } } return configManager; } //單例模式必須給外界提供一個公用方法 public String getValue(String key){ return properties.getProperty(key); } }
===========================================================================================
餓漢模式:安全執行緒
在類載入時,就完成初始化,所以類載入慢 ,運行時快。
//前面private static ConfigManager configManager;直接 new ConfigManager();
public static ConfigManager getInstance(){
return configManager;
}
單例模式