寫在前面
很多小伙伴問我:我在大學時候就學習了多執行緒,作業后,自己也看過不少有關多執行緒和并發編程的書籍和視頻,為啥真正到作業的時候,我還是不知道在專案中哪里會用到并發編程,我知道有關于并發編程的各個知識點,但是沒辦法將這些知識點串起來,形成知識體系,冰河,你能不能推一篇文章,講講如何學習并發編程,如何將并發編程的各個知識點串成知識體系呢?今天,我們就一起來探討下有關于并發編程的核心知識體系,
有關更多并發編程的知識,小伙伴們可以到【高并發專題】進行系統學習,
高并發專題的鏈接地址為:http://r6d.cn/r8x4
并發編程的核心
我們先來看下并發編程的三大核心知識圖,

核心問題
要想學好并發編程,首先要理解三個核心的問題:分工,同步和協作(《【高并發】要想學好并發編程,關鍵是要理解這三個核心問題》),
詭異的問題
并發編程并不像普通業務中的CRUD那么簡單,往往在并發編程中會出現各種各樣詭異的Bug問題(《【高并發】導致并發編程頻繁出問題的“幕后黑手”》),而且這些問題也不好復現,究其根本原因,是作業系統的CPU與記憶體和I/O存在速度差異,而作業系統和編譯器在解決這些速度差異帶來的問題時,又引入了可見性(《【高并發】解密導致詭異并發問題的第一個幕后黑手——可見性問題》)、原子性(《【高并發】解密導致并發問題的第二個幕后黑手——原子性問題》)、有序性(《【高并發】解密導致并發問題的第三個幕后黑手——有序性問題》)問題,而這三個核心問題,就是導致并發編程出現各種詭異Bug的根本所在,
如何解決問題
在Java中,如何解決并發編程中的可見性、原子性和有序性問題呢?在Java中提供了記憶體模型和互斥鎖的方案來解決這些問題,在Java的記憶體模型中,有一個很重要的原則,那就是:Happens-Before原則(《何為Happens-Before原則?這次徹底懂了!》),通過Java的記憶體模型,能夠解決可見性和有序性問題(《【高并發】如何解決可見性和有序性問題?這次徹底懂了!》),對于如何解決原子性問題,我們使用的是互斥鎖方案(《【高并發】如何使用互斥鎖解決多執行緒的原子性問題?這次終于明白了!》),
互斥鎖帶來的問題
互斥鎖在是解決并發問題的核心方案,但是一不留神就會引起死鎖(《【高并發】高并發環境下詭異的加鎖問題(你加的鎖未必安全)》、《【高并發】優化加鎖方式時竟然死鎖了!!》)
優化加鎖方式
既然互斥鎖會帶來死鎖的問題,那我們如何優化加鎖的方式呢?(《【高并發】高并發場景下如何優化加鎖方式?看完這篇我確實明白了!!》)
執行緒知識
執行緒的生命周期(《【高并發】執行緒的生命周期其實沒有我們想象的那么簡單!!》)、高并發場景下我們到底創建多少執行緒合適(《【高并發】高并發場景下創建多少執行緒才合適?一條公式幫你搞定!!》)?為什么區域變數就是執行緒安全的(《【高并發】終于弄懂為什么區域變數是執行緒安全的了!!》)?為什么很多小伙伴面試會栽在InterruptedException上(《【高并發】由InterruptedException例外引發的思考》)?我可以用Java中的面向物件的思想寫好并發程式,你信嗎(《【高并發】信不信?以面向物件的思想是可以寫好高并發程式的!》)?
核心案例
秒殺系統架構解密(《【高并發】高并發秒殺系統架構解密,不是所有的秒殺都是秒殺!》)
分布式鎖架構解密(《【高并發】高并發分布式鎖架構解密,不是所有的鎖都是分布式鎖!!》)
分布式限流理論(《【高并發】如何實作億級流量下的分布式限流?這些理論你必須掌握!!》)
分布式限流演算法(《【高并發】如何實作億級流量下的分布式限流?這些演算法你必須掌握!!》)
實作HTTP介面限流(《【高并發】億級流量場景下如何為HTTP介面限流?看完我懂了!!》)
實作分布式限流(《【高并發】億級流量場景下如何實作分布式限流?看完我徹底懂了!!》)
更多內容
有關更多并發編程的知識,小伙伴們可以到【高并發專題】進行系統學習,
高并發專題的鏈接地址為:http://r6d.cn/r8x4
好了,今天就到這兒吧,我是冰河,我們下期見!
CSDN認證博客專家
hive
storm
hadoop
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/171622.html
標籤:其他
