并發(fā)編程終章:Java并發(fā)編程系列總綱

并發(fā)編程目錄

磕磕絆絆近半年時(shí)間嘀粱,在工作之余奠骄,前后一共寫了十余篇深入Java并發(fā)編程系列的文章,由于內(nèi)容頗多剩瓶,所以在這里列一個(gè)目錄方便諸位翻閱驹溃。

在學(xué)習(xí)并發(fā)編程時(shí),大家都會(huì)接觸一個(gè)關(guān)鍵字:volatile延曙,使用它修飾的成員可以保證多線程之間可見豌鹤,而想要理解它的實(shí)現(xiàn)之前,首先需要先掌握的就是Java的內(nèi)存模型:JMM枝缔。所以volatile與JMM作為了并發(fā)系列的開篇:

多線程編程中布疙,注定是會(huì)牽扯并發(fā)安全問題的,而在Java中提供了原生的synchronized關(guān)鍵字作為隱式鎖愿卸,保證多線程之間的線程安全灵临。其內(nèi)部覆蓋的知識(shí)面較多,需要理解的地方也并不少趴荸。第二/三篇文章則是圍繞著synchronized關(guān)鍵字從基本的應(yīng)用到JVM源碼儒溉,全面的對(duì)它進(jìn)行原理剖析:

再談到Java的JUC并發(fā)包,其內(nèi)部大量的應(yīng)用了CAS機(jī)制作為基礎(chǔ)實(shí)現(xiàn)并發(fā)組件笼平,同時(shí)大名鼎鼎的無鎖策略园骆,也是采用CAS技術(shù)來保證線程執(zhí)行的安全性寓调,CAS機(jī)制就是無鎖策略實(shí)現(xiàn)的關(guān)鍵锌唾。在Java中,CAS機(jī)制的實(shí)現(xiàn)是依賴于Unsafe魔法類提供的native操作實(shí)現(xiàn)晌涕,同時(shí)Unsafe類也是整個(gè)JUC原子包的核心。下面一篇文章則從CAS機(jī)制的初步探討巡扇,到Unsafe魔法類以及Atomic原子包的源碼分析進(jìn)行了闡述:

前面談到:CAS機(jī)制是JUC并發(fā)包的基石花墩,那么接下來要敘述的AQS則是整個(gè)并發(fā)包的核心村缸。AQS作為JUC包中的特殊存在梯皿,向下依賴了自旋以及CAS機(jī)制,向上則提供了一個(gè)同步器的實(shí)現(xiàn)东羹,它并不直接對(duì)外提供服務(wù),而是作為基礎(chǔ)組件恕酸,為JUC包中的其他并發(fā)組件提供服務(wù)堪滨,如ReetrantLock、SemaphoreCountDownLatch等常用的并發(fā)工具蕊温。下面兩篇文章分別從AQS獨(dú)占式以及共享式兩種模式袱箱,對(duì)AQS進(jìn)行了全面分析:

談完AQS后,前面文章中义矛,解決并發(fā)安全問題的方案一共出現(xiàn)了隱式鎖方案发笔、無鎖策略、顯式獨(dú)占鎖以及共享鎖模式四種症革,而緊接著要談的ThreadLocal卻反其道而行之筐咧,從共享變量拷貝副本的角度出發(fā),避免了多線程競(jìng)爭(zhēng)噪矛,從而解決了線程安全問題量蕊。它屬于一種防止并發(fā)問題產(chǎn)生的的重要手段:

回歸根本,在我們學(xué)習(xí)Java并發(fā)編程時(shí)艇挨,大家對(duì)于多線程的創(chuàng)建方式都不陌生残炮,繼承Thread類以及實(shí)現(xiàn)Runnable、Callable接口缩滨。但實(shí)際上势就,創(chuàng)建多線程的方式只有一種,那就是繼承Thread類脉漏,因?yàn)橹挥羞@種方式才能真正的映射一條OS的內(nèi)核線程執(zhí)行苞冯,Runnable、Callable對(duì)象則只能被稱為一個(gè)多線程任務(wù)侧巨。但無論創(chuàng)建哪種類型的任務(wù)都無法實(shí)現(xiàn)真正意義上的異步回調(diào)舅锄,而Java8中推出的CompletableFuture成為了真正劃時(shí)代的方式。下面一篇文章對(duì)多線程任務(wù)進(jìn)行了全面分析:

在多線程開發(fā)過程中,往往之前的容器如:HashMap坦仍、ArrayList等鳍烁,在多線程環(huán)境中都會(huì)出現(xiàn)安全隱患,而HashTable繁扎、Vector等這類的安全容器則犧牲了大量的性能換取線程安全性幔荒,使用它們往往不能滿足日益增長(zhǎng)的用戶需求。而在JUC包中也提供了大量的并發(fā)容器,它們?cè)谀軌虼_保線程安全的同時(shí)也能在性能方面表現(xiàn)優(yōu)良铺峭,第九篇?jiǎng)t從源碼角度全面的剖析了Java中的常見并發(fā)容器:

前述文章中卫键,對(duì)于并發(fā)相關(guān)的工具都分析了個(gè)大概傀履,接著來看看Java線程池家族中的ThreadPoolExecutor體系,線程池能夠?qū)ava程序中創(chuàng)建出的線程進(jìn)行統(tǒng)一的管理莉炉、調(diào)度以及監(jiān)控钓账,同時(shí)也做到了將一條線程復(fù)用。下面的文章中絮宁,從創(chuàng)建無規(guī)則的線程隱患問題分析到線程池的源碼解讀梆暮,全面詳解了ThreadPoolExecutor體系:

上章中詳解了線程池家族的ThreadPoolExecutor體系啦粹,而在Java7中再次推出了Fork/Join框架,作為了Java中對(duì)分治思想的實(shí)現(xiàn)以及作為ThreadPoolExecutor體系補(bǔ)充窘游,同時(shí)也為Java8中的并行流技術(shù)打下了扎實(shí)的基礎(chǔ)唠椭。ForkJoinPool同時(shí)也能夠在最大程度上發(fā)揮出多核機(jī)器的性能,其內(nèi)部采用了工作竊取的算法保證了每條線程的工作飽和忍饰。但Fork/Join框架的整體實(shí)現(xiàn)過于龐大贪嫂,下面通過兩篇三萬多字的文章進(jìn)行闡述:

上述大部分文章中,絕大多數(shù)情況我們都是在圍繞著多線程之間的線程安全問題進(jìn)行撰寫艾蓝,但它們都是基于單體架構(gòu)下的Java程序進(jìn)行分析的力崇,而如今單體架構(gòu)的時(shí)代早已遠(yuǎn)去,一般目前Java程序都是通過多機(jī)器赢织、分布式的架構(gòu)模式進(jìn)行部署亮靴。那么在多部署環(huán)境下,之前我們分析的CAS無鎖于置、隱式鎖台猴、顯式鎖等方案是否還有效呢?答案是無效俱两。在新的架構(gòu)下,對(duì)于線程安全問題的解決則又需要推出新的方案:分布式鎖曹步。終篇的文章中從分布式架構(gòu)下的安全問題闡述到Redis宪彩、Zookeeper實(shí)現(xiàn)分布式鎖的原理分析進(jìn)行了全面敘述:

至此讲婚,整個(gè)并發(fā)編程系列的文章告一段落尿孔,后續(xù)缺失的一部分有機(jī)會(huì)再來補(bǔ)充。

前述中一直在對(duì)于并發(fā)工具和并發(fā)安全問題進(jìn)行闡述,而對(duì)于并發(fā)編程其他的一些問題忽略了活合,如死鎖雏婶、活鎖、鎖饑餓等問題白指,也包括對(duì)于線程留晚、進(jìn)程、纖程告嘲、協(xié)程等一些概念未做敘述错维,而如今再在最后進(jìn)行補(bǔ)充:

以上文章一般多以底層、原理源碼等深度分析為主僧界,雖不能保證絕對(duì)權(quán)威侨嘀,但至少能為諸君理解Java并發(fā)編程的鋪平道路!如果你對(duì)于文章中有存在疑義的地方可以在評(píng)論區(qū)指正留言捎泻!

同時(shí)如果你感覺文章對(duì)于你有幫助飒炎,歡迎點(diǎn)贊、評(píng)論笆豁、收藏郎汪、關(guān)注!

下期預(yù)告:《深入理解Java虛擬機(jī)JVM系列》
先上一副個(gè)人畫的JVM圖給大家欣賞:《深入理解Java虛擬機(jī)之JVM全景架構(gòu)圖》

身體和心靈總要有一個(gè)在路上闯狱,要么旅行煞赢,要么學(xué)習(xí)!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末哄孤,一起剝皮案震驚了整個(gè)濱河市照筑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌瘦陈,老刑警劉巖凝危,帶你破解...
    沈念sama閱讀 206,013評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異晨逝,居然都是意外死亡蛾默,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門捉貌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來支鸡,“玉大人冬念,你說我怎么就攤上這事∧琳酰” “怎么了急前?”我有些...
    開封第一講書人閱讀 152,370評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)瀑构。 經(jīng)常有香客問我裆针,道長(zhǎng),這世上最難降的妖魔是什么检碗? 我笑而不...
    開封第一講書人閱讀 55,168評(píng)論 1 278
  • 正文 為了忘掉前任据块,我火速辦了婚禮,結(jié)果婚禮上折剃,老公的妹妹穿的比我還像新娘另假。我一直安慰自己,他們只是感情好怕犁,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,153評(píng)論 5 371
  • 文/花漫 我一把揭開白布边篮。 她就那樣靜靜地躺著,像睡著了一般奏甫。 火紅的嫁衣襯著肌膚如雪戈轿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,954評(píng)論 1 283
  • 那天阵子,我揣著相機(jī)與錄音思杯,去河邊找鬼。 笑死挠进,一個(gè)胖子當(dāng)著我的面吹牛色乾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播领突,決...
    沈念sama閱讀 38,271評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼暖璧,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了君旦?” 一聲冷哼從身側(cè)響起澎办,我...
    開封第一講書人閱讀 36,916評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎金砍,沒想到半個(gè)月后局蚀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,382評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡恕稠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,877評(píng)論 2 323
  • 正文 我和宋清朗相戀三年琅绅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谱俭。...
    茶點(diǎn)故事閱讀 37,989評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡奉件,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出昆著,到底是詐尸還是另有隱情县貌,我是刑警寧澤,帶...
    沈念sama閱讀 33,624評(píng)論 4 322
  • 正文 年R本政府宣布凑懂,位于F島的核電站煤痕,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏接谨。R本人自食惡果不足惜摆碉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,209評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望脓豪。 院中可真熱鬧巷帝,春花似錦、人聲如沸扫夜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽笤闯。三九已至堕阔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間颗味,已是汗流浹背超陆。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評(píng)論 1 260
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留浦马,地道東北人时呀。 一個(gè)月前我還...
    沈念sama閱讀 45,401評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像捐韩,于是被迫代替她去往敵國(guó)和親退唠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,700評(píng)論 2 345

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