国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

單例模式,解決線程沖突

2019-11-14 15:31:17
字體:
來源:轉載
供稿:網友

/**
 * 單例模式的使用
 *
 * 單例創建用戶服務對象 沒必要給每個用戶都創建一個
 *
 * 單例 :1 構造方法私有化 2 創建一個私有的靜態變量?。场」驳撵o態方法 當做入口
 *
 * @param user
 */

/*
 * 第一種單例模式
 */

// 問題 : 預先加載,沒有手動實例化變量的時候 已經實例化了變量
// 當你要使用對象的時候,只是把這個變量給你

// 1 構造方法私有化 外界不能直接訪問
PRivate UserService(){}
// 2 創建一個私有的靜態變量(常量)
private static final UserService USER_SERVICE = new UserService(); // 3對外提供一個 公共的 靜態的 返回該對象實例的一個方法
public static UserService getInstance(){
    return USER_SERVICE; }

 

/**
 * 第二種    問題: 排隊嚴重     嚴重影響效率     因為每個用戶在計算機里面都是一個單獨的線程    
 *         當 一個線程 調用UserService 對象以后    加了一把鎖    
 *   別人就訪問不了了
 *   
 *   
 *   單例模式的目標是什么?
 *           是為了讓當前類只能產生一個對象    如果 我先后創建了多個還是單例嗎?.
 * @param user
 */
private UserService(){};//構造方法私有化
private static UserService userService = null;  //先創建一個 靜態變量
public static synchronized UserService getInstance(){  
    if(userService == null){   //如果為空  我返回一個新的  
        userService = new UserService();
    }
    return userService;  //如果不為空 直接返回
}

 

// -------------第三種---------------------
/**
 * 如果兩個線程同時判斷了userService是空 進去了 第一個線程創建的疏忽,鎖住了,第二個需要瞪大,第一個線程創建完了之后
 * 本來是第二個,我不需要再創建了 ,但是他已經在判斷里面了,所以又創建了一個 ,所以說,單例模式沒有成功
 *
 * @param user
 */
private UserService(){}//構造方法私有化
private static UserService userService = null;
public static UserService getInstance() {
    if(userService == null){//如果兩個或多個線程同時進入這里,判斷完成后都為空,那么會創建好多對象吧,單例模式就失效了
        synchronized(UserService.class){//我現在對整個類鎖了 userService = new
            UserService();
        }
    } return userService;
}

// -----------------第四種----------------
private UserService() {
}// 構造方法私有化

private static UserService userService = null;// 私有的靜態變量

public static UserService getInstance() {// 獲取當前類對象的方法
    if (userService == null) {
        synchronized (UserService.class) {// 現在是對整個類鎖住了
            if (userService == null) {// 更上面第三章方法一樣,當前就能解決第三種方法的問題(創建了多個對象),因為,就是兩個同事進入上面的if判斷,到這里,就會判斷不通過,就會直接返回一個對象,不會在去創建新的對象
                userService = new UserService();
            }

        }
    }
    return userService;
}

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 绥滨县| 饶河县| 会昌县| 苍南县| 无为县| 昌宁县| 博野县| 华坪县| 沁水县| 英超| 自治县| 皮山县| 蓬溪县| 新竹县| 崇明县| 辽阳县| 兴安盟| 巴马| 乳山市| 嘉定区| 景谷| 湘潭市| 肃北| 宝坻区| 原平市| 临朐县| 岢岚县| 南通市| 二连浩特市| 滕州市| 义马市| 麻栗坡县| 孟连| 无为县| 佳木斯市| 沙坪坝区| 灵宝市| 富裕县| 大埔县| 库伦旗| 泾川县|