黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學(xué)習(xí)攻略 Java學(xué)習(xí) Java并發(fā)編程學(xué)習(xí)筆記

Java并發(fā)編程學(xué)習(xí)筆記

更新時間:2019-12-23 15:11:41 來源:動力節(jié)點(diǎn) 瀏覽2861次

Java并發(fā)編程一直是Java程序員必須懂但又是很難懂的技術(shù)內(nèi)容。這里不僅僅是指使用簡單的多線程編程,或者使用juc的某個類。當(dāng)然這些都是并發(fā)編程的基本知識,除了使用這些工具以外,Java并發(fā)編程中涉及到的技術(shù)原理十分豐富。

  于是乎,就誕生了想寫點(diǎn)東西記錄下,以提升理解和對并發(fā)編程的認(rèn)知。為什么需要用到并發(fā)?凡事總有好壞兩面,之間的trade-off是什么,也就是說并發(fā)編程具有哪些挑戰(zhàn)?以及在進(jìn)行并發(fā)編程時應(yīng)該了解和掌握的概念是什么?并發(fā)編程的三大特性是什么?這篇文章主要以這四個問題來談一談。

  一.為什么要用到并發(fā)

  一直以來,硬件的發(fā)展極其迅速,也有一個很著名的"摩爾定律",可能會奇怪明明討論的是并發(fā)編程為什么會扯到了硬件的發(fā)展,這其中的關(guān)系應(yīng)該是多核CPU的發(fā)展為并發(fā)編程提供的硬件基礎(chǔ)。摩爾定律并不是一種自然法則或者是物理定律,它只是基于認(rèn)為觀測數(shù)據(jù)后,對未來的一種預(yù)測。按照所預(yù)測的速度,我們的計算能力會按照指數(shù)級別的速度增長,不久以后會擁有超強(qiáng)的計算能力,正是在暢想未來的時候,2004年,Intel宣布4GHz芯片的計劃推遲到2005年,然后在2004年秋季,Intel宣布徹底取消4GHz的計劃,也就是說摩爾定律的有效性超過了半個世紀(jì)戛然而止。但是,聰明的硬件工程師并沒有停止研發(fā)的腳步,他們?yōu)榱诉M(jìn)一步提升計算速度,而不是再追求單獨(dú)的計算單元,而是將多個計算單元整合到了一起,也就是形成了多核CPU。短短十幾年的時間,家用型CPU,比如Intel i7就可以達(dá)到4核心甚至8核心。而專業(yè)服務(wù)器則通常可以達(dá)到幾個獨(dú)立的CPU,每一個CPU甚至擁有多達(dá)8個以上的內(nèi)核。因此,摩爾定律似乎在CPU核心擴(kuò)展上繼續(xù)得到體驗。因此,多核的CPU的背景下,催生了并發(fā)編程的趨勢,通過 并發(fā)編程的形式可以將多核CPU的計算能力發(fā)揮到極致,性能得到提升 。

  頂級計算機(jī)科學(xué)家Donald Ervin Knuth如此評價這種情況:在我看來,這種現(xiàn)象(并發(fā))或多或少是由于硬件設(shè)計者無計可施了導(dǎo)致的,他們將摩爾定律的責(zé)任推給了軟件開發(fā)者。

  另外,在特殊的業(yè)務(wù)場景下先天的就適合于并發(fā)編程。比如在圖像處理領(lǐng)域,一張1024X768像素的圖片,包含達(dá)到78萬6千多個像素。即時將所有的像素遍歷一邊都需要很長的時間,面對如此復(fù)雜的計算量就需要充分利用多核的計算的能力。又比如當(dāng)我們在網(wǎng)上購物時,為了提升響應(yīng)速度,需要拆分,減庫存,生成訂單等等這些操作,就可以進(jìn)行拆分利用多線程的技術(shù)完成。 面對復(fù)雜業(yè)務(wù)模型,并行程序會比串行程序更適應(yīng)業(yè)務(wù)需求,而并發(fā)編程更能吻合這種業(yè)務(wù)拆分 。正是因為這些優(yōu)點(diǎn),使得多線程技術(shù)能夠得到重視,也是一名Java學(xué)習(xí)者應(yīng)該掌握的:

  充分利用多核CPU的計算能力;

  方便進(jìn)行業(yè)務(wù)拆分,提升應(yīng)用性能

  二. 并發(fā)編程有哪些挑戰(zhàn)

  多線程技術(shù)有這么多的好處,難道就沒有一點(diǎn)缺點(diǎn)或者挑戰(zhàn)么,就在任何場景下就一定適用么?很顯然不是。

  2.1 頻繁的上下文切換

  時間片是CPU分配給各個線程的時間,因為時間非常短,所以CPU不斷通過切換線程,讓我們覺得多個線程是同時執(zhí)行的,時間片一般是幾十毫秒。而每次切換時,需要保存當(dāng)前的狀態(tài)起來,以便能夠進(jìn)行恢復(fù)先前狀態(tài),而這個切換時非常損耗性能,過于頻繁反而無法發(fā)揮出多線程編程的優(yōu)勢。通常減少上下文切換可以采用無鎖并發(fā)編程,CAS算法,使用最少的線程和使用協(xié)程。

  無鎖并發(fā)編程:可以參照concurrentHashMap鎖分段的思想,不同的線程處理不同段的數(shù)據(jù),這樣在多線程競爭的條件下,可以減少上下文切換的時間。

  CAS算法:利用Atomic下使用CAS算法來更新數(shù)據(jù),使用了樂觀鎖,可以有效的減少一部分不必要的鎖競爭帶來的上下文切換

  使用最少線程:避免創(chuàng)建不需要的線程,比如任務(wù)很少,但是創(chuàng)建了很多的線程,這樣會造成大量的線程都處于等待狀態(tài)

  協(xié)程:在單線程里實(shí)現(xiàn)多任務(wù)的調(diào)度,并在單線程里維持多個任務(wù)間的切換

  由于上下文切換也是個相對比較耗時的操作,所以在"java并發(fā)編程的藝術(shù)"一書中有過一個實(shí)驗,并發(fā)累加未必會比串行累加速度要快。 可以使用Lmbench3測量上下文切換的時長 vmstat測量上下文切換次數(shù)

       以上就是動力節(jié)點(diǎn)Java培訓(xùn)機(jī)構(gòu)小編介紹的“Java并發(fā)編程學(xué)習(xí)筆記”的內(nèi)容,希望對大家有幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。

       相關(guān)文章

  零基礎(chǔ)怎么自學(xué)Java,完整版Java學(xué)習(xí)路線圖

  你還在糾結(jié)學(xué)Java,是自學(xué)還是去培訓(xùn)班嗎

  一個標(biāo)準(zhǔn)的Java程序員如何進(jìn)階?

  Java學(xué)習(xí)路線清單,快速進(jìn)階Java

  Java編程初學(xué)者要如何進(jìn)階

提交申請后,顧問老師會電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 亚洲国产欧美精品 | 国产午夜在线观看视频播放 | 成人一级视频 | 亚洲成a人片在线观看88 | 午夜一区二区三区 | 伦伦影院精品一区 | 好吊色这里只有精品 | 欧美亚洲不卡 | 国内成人免费视频 | 成人精品一区二区三区 | 你懂的视频在线播放 | 亚洲看片 | 一区二区中文字幕在线观看 | 久草视频在线免费 | 国产精品v一区二区三区 | 亚洲三级影视 | 人人狠人人透人人爱 | 午夜久久免费视频 | 久热精品男人的天堂在线视频 | 男人私人影院免费看视频 | 成人免费在线播放 | 国产91在线chines看 | 在线日本三级 | 成人亚洲欧美日韩在线 | 国产97公开成人免费视频 | 国产aaaaaa | 亚洲欧美影视 | 日日摸夜夜添夜夜添影院视频 | 草草影院欧美三级日本 | 亚洲国产成人精品激情 | 黄色成人在线视频 | 51自拍| 日本亚洲天堂网 | 国内精品一区二区三区 | 成人免费www在线高清观看 | 欧美日性| 99色播| 日韩城人免费 | 国产精品视频免费一区二区三区 | 精品国产一区二区三区麻豆小说 | 亚洲黄色一级 |