上周遇到一個高并發(fā)問題,我懵了……
在中國,基本每 3 個程序員里,就有 1 個用 Java 作為主要語言,Java 程序員的競爭程度自然不用多說。
現(xiàn)在,很多大型互聯(lián)網(wǎng)廠商的系統(tǒng)并發(fā)量輕松過百萬,作為一個 Java 工程師,你必須熟練掌握并發(fā)編程,才有更多的機會獲得大廠青睞。但并發(fā)編程涉及操作系統(tǒng)、內(nèi)存、CPU、編程語言等多方面能力,非常考驗程序員內(nèi)功,比如:
Java 里的 synchronized、wait()/notify() 到底怎么用?
多線程同步和互斥有哪幾種實現(xiàn)方法?
悲觀鎖和樂觀鎖有什么區(qū)別?
其實,并發(fā)編程并不是 Java 特有的語言特性,而是一個通用且成熟的領(lǐng)域。只有站在較高層面,才能系統(tǒng)且有體系地思考問題,比如,上面說過的 synchronized、wait()、notify() 不過是操作系統(tǒng)領(lǐng)域里管程模型的一種實現(xiàn),Java SDK 并發(fā)包里的條件變量 Condition 也是管程里的概念。
單獨理解這些知識點自然是管中窺豹,但站在管程這個理論模型的高度,你就會發(fā)現(xiàn)這些知識并不難,用起來也更為得心應(yīng)手。
總的來說,并發(fā)編程領(lǐng)域可以抽象成三個核心問題:分工、同步和互斥,如下圖所示:

這張圖譜出自王寶令,他是京東資深架構(gòu)師,主導(dǎo)研發(fā)了支持高并發(fā)處理能力的 API 網(wǎng)關(guān)、高性能數(shù)據(jù)庫連接池,以及海量數(shù)據(jù)歸檔平臺,最近 7 年,他一直從事 Java 開發(fā)平臺和基礎(chǔ)中間件的設(shè)計開發(fā)工作。
最早認識他,是因為他的《Java 并發(fā)編程實戰(zhàn)》專欄,那會兒我剛接手一個百萬并發(fā)量的項目,看到這個課,立馬就訂閱了。跟著學(xué)下來,幫我解決了工作中的不少問題,少踩很多坑。
在專欄中,他建立了一張?zhí)幚聿l(fā)問題的全景圖,讓你從宏觀上徹底理解并發(fā)問題的本質(zhì)。
具體一點說,他解析了并發(fā)編程的核心原理,講解 12 個 Java 并發(fā)工具類,帶你搞懂 9 種最常見的并發(fā)設(shè)計模式,掌握 4 大經(jīng)典并發(fā)編程實戰(zhàn)案例,最終得心應(yīng)手地解決各種并發(fā)難題,同時將這些知識用于其他編程語言,輕松做到舉一反三。


