并發(fā)—高并發(fā)

并發(fā):多個(gè)線程操作相同的資源闰围,保證線程安全赃绊,合理使用資源
高并發(fā):服務(wù)能同時(shí)處理很多請(qǐng)求,提高程序性能

線程安全性


CAS=compareAndSwap羡榴,拿當(dāng)前對(duì)象的值和底層的值進(jìn)行對(duì)比信认,前對(duì)象的值和底層的值一致時(shí)執(zhí)行對(duì)應(yīng)的操作蜻直,不一樣就不停取最新的值另玖,直到相同的時(shí)候才執(zhí)行操作袱贮。

CAS 死循環(huán)內(nèi)不斷嘗試修改目標(biāo)值直到修改成功,如果競(jìng)爭(zhēng)不激烈的時(shí)候修改成功概率很高迄沫。競(jìng)爭(zhēng)激烈的時(shí)候修改失敗的概率很高稻扬,不斷嘗試就會(huì)影響性能。

long羊瘩,double jvm 允許將64位的讀操作或者寫操作拆成2個(gè)32位的操作泰佳。

LongAdder的實(shí)現(xiàn)思想:熱點(diǎn)數(shù)據(jù)分離。把a(bǔ)tomicLong value分離為數(shù)組困后,每個(gè)線程訪問(wèn)時(shí)通過(guò)hash等算法映射到其中一個(gè)數(shù)組計(jì)數(shù)乐纸,最終的計(jì)數(shù)結(jié)果是數(shù)組的求和累加衬廷,熱點(diǎn)數(shù)據(jù)value就被分離成多個(gè)單元摇予,提高了并行度。高并發(fā)分散提高性能吗跋,但準(zhǔn)確度會(huì)有偏差侧戴。

序列號(hào)生成的情況宁昭,準(zhǔn)確的數(shù)值的情況,全局統(tǒng)一計(jì)數(shù)的情況還是應(yīng)該選擇atomic


synchronized和Atomic比較重要

可見(jiàn)性

volatile不具備原子性酗宋,使用條件:
對(duì)變量的寫操作不依賴于當(dāng)前值
該變量沒(méi)有包含在具有其他變量的不變式子中
適合作為狀態(tài)標(biāo)記量积仗,和雙重檢測(cè)(單例模式)

有序性

安全發(fā)布對(duì)象

單例模式

/**
 * 懶漢模式
 * 單例的實(shí)例在第一次使用時(shí)創(chuàng)建
 * 線程不安全
 */
public class SingletonExample1 {

    //私有構(gòu)造函數(shù)
    private SingletonExample1(){

    }

    //單例對(duì)象
    private static SingletonExample1 instance = null;

    //靜態(tài)的工廠方法
    public static SingletonExample1 getInstance(){
        if(instance == null){
            instance = new SingletonExample1();
        }
        return instance;
    }
}

/**
 * 懶漢模式
 * 單例的實(shí)例在第一次使用時(shí)創(chuàng)建
 * 線程安全
 */
public class SingletonExample3 {

    //私有構(gòu)造函數(shù)
    private SingletonExample3(){

    }

    //單例對(duì)象
    private static SingletonExample3 instance = null;

    //靜態(tài)的工廠方法
    public static synchronized SingletonExample3 getInstance(){
        if(instance == null){
            instance = new SingletonExample3();
        }
        return instance;
    }
}

/**
 * 懶漢模式 --- 雙重同步鎖單例模式
 * 單例的實(shí)例在第一次使用時(shí)創(chuàng)建
 * 線程不安全
 */
public class SingletonExample4 {

    //私有構(gòu)造函數(shù)
    private SingletonExample4(){

    }
    // 1、memory = allocate() 分配內(nèi)存空間
    // 2蜕猫、ctorInstance() 初始化對(duì)象
    // 3寂曹、instance = memory 設(shè)置instance指向剛分配的內(nèi)存

    //JVM和cpu優(yōu)化,發(fā)生了指令重排

    // 1回右、memory = allocate() 分配內(nèi)存空間
    // 3隆圆、instance = memory 設(shè)置instance指向剛分配的內(nèi)存
    // 2、ctorInstance() 初始化對(duì)象

    //單例對(duì)象
    private static SingletonExample4 instance = null;

    //靜態(tài)的工廠方法
    public static SingletonExample4 getInstance(){
        if(instance == null){ //雙重檢測(cè)機(jī)制
            synchronized(SingletonExample4.class){//同步鎖
                if(instance == null) {
                    instance = new SingletonExample4();
                }
            }
        }
        return instance;
    }
}

/**
 * 懶漢模式 --- 雙重同步鎖單例模式
 * 單例的實(shí)例在第一次使用時(shí)創(chuàng)建
 * 線程安全
 */
public class SingletonExample5 {

    //私有構(gòu)造函數(shù)
    private SingletonExample5(){

    }
    // 1翔烁、memory = allocate() 分配內(nèi)存空間
    // 2渺氧、ctorInstance() 初始化對(duì)象
    // 3、instance = memory 設(shè)置instance指向剛分配的內(nèi)存

    //JVM和cpu優(yōu)化蹬屹,發(fā)生了指令重排

    // 1侣背、memory = allocate() 分配內(nèi)存空間
    // 3、instance = memory 設(shè)置instance指向剛分配的內(nèi)存
    // 2慨默、ctorInstance() 初始化對(duì)象

    //單例對(duì)象 volatile + 雙重檢測(cè)機(jī)制 -> 禁止指令重排
    private volatile static SingletonExample5 instance = null;

    //靜態(tài)的工廠方法
    public static SingletonExample5 getInstance(){
        if(instance == null){ //雙重檢測(cè)機(jī)制
            synchronized(SingletonExample5.class){//同步鎖
                if(instance == null) {
                    instance = new SingletonExample5();
                }
            }
        }
        return instance;
    }
}



/**
 * 餓漢模式
 * 單例的實(shí)例在類裝載時(shí)創(chuàng)建
 * 線程安全
 */
public class SingletonExample2 {

    //私有構(gòu)造函數(shù)
    private SingletonExample2(){

    }
    //單例對(duì)象
    private static SingletonExample2 instance = new SingletonExample2();

    //靜態(tài)的工廠方法
    public static SingletonExample2 getInstance(){
        return instance;
    }

}
/**
 * 餓漢模式
 * 單例的實(shí)例在類裝載時(shí)創(chuàng)建
 * 線程安全
 */
public class SingletonExample6 {

    //私有構(gòu)造函數(shù)
    private SingletonExample6(){

    }
    //單例對(duì)象
    private static SingletonExample6 instance = null;

    static{
        instance = new SingletonExample6();
    }

    //靜態(tài)的工廠方法
    public static SingletonExample6 getInstance(){
        return instance;
    }

    public static void main(String[] args) {
        System.out.println(getInstance().hashCode());
        System.out.println(getInstance().hashCode());
    }
}

/**
 * 枚舉模式:最安全贩耐,推薦使用
 * @author WangCH
 * @create 2018-03-21 21:23
 */
public class SingletonExample7 {

    private SingletonExample7(){

    }

    public static SingletonExample7 getInstance(){
        return Singleton.INSTANCE.getInstance();
    }

    private enum Singleton{

        INSTANCE;

        private SingletonExample7 singletonExample7;

        //JVM保證絕對(duì)只被調(diào)用1次
        Singleton(){
            singletonExample7 = new SingletonExample7();
        }

        public SingletonExample7 getInstance() {
            return singletonExample7;
        }
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市厦取,隨后出現(xiàn)的幾起案子憔杨,更是在濱河造成了極大的恐慌,老刑警劉巖蒜胖,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件消别,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡台谢,警方通過(guò)查閱死者的電腦和手機(jī)寻狂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)朋沮,“玉大人蛇券,你說(shuō)我怎么就攤上這事》兀” “怎么了纠亚?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)筋夏。 經(jīng)常有香客問(wèn)我蒂胞,道長(zhǎng),這世上最難降的妖魔是什么条篷? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任骗随,我火速辦了婚禮蛤织,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鸿染。我一直安慰自己指蚜,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布涨椒。 她就那樣靜靜地躺著摊鸡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蚕冬。 梳的紋絲不亂的頭發(fā)上柱宦,一...
    開(kāi)封第一講書(shū)人閱讀 49,071評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音播瞳,去河邊找鬼掸刊。 笑死,一個(gè)胖子當(dāng)著我的面吹牛赢乓,可吹牛的內(nèi)容都是我干的忧侧。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼牌芋,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蚓炬!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起躺屁,我...
    開(kāi)封第一講書(shū)人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤肯夏,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后犀暑,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體驯击,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年耐亏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了徊都。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡广辰,死狀恐怖暇矫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情择吊,我是刑警寧澤李根,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站几睛,受9級(jí)特大地震影響房轿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一冀续、第九天 我趴在偏房一處隱蔽的房頂上張望琼讽。 院中可真熱鬧必峰,春花似錦洪唐、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至肝匆,卻和暖如春粒蜈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背旗国。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工枯怖, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人能曾。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓度硝,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親寿冕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蕊程,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容