從65節(jié)到82節(jié),我們用了18篇文章討論并發(fā),本節(jié)進行簡要總結(jié)。
多線程開發(fā)有兩個核心問題,一個是競爭,另一個是協(xié)作。競爭會出現(xiàn)線程安全問題,所以,本節(jié)首先總結(jié)線程安全的機制,然后是協(xié)作的機制。管理競爭和協(xié)作是復(fù)雜的,所以Java提供了更高層次的服務(wù),比如并發(fā)容器類和異步任務(wù)執(zhí)行服務(wù),我們也會進行總結(jié)。本節(jié)綱要如下:
線程安全的機制
線程的協(xié)作機制
容器類
任務(wù)執(zhí)行服務(wù)
線程安全的機制
線程表示一條單獨的執(zhí)行流,每個線程有自己的執(zhí)行計數(shù)器,有自己的棧,但可以共享內(nèi)存,共享內(nèi)存是實現(xiàn)線程協(xié)作的基礎(chǔ),但共享內(nèi)存有兩個問題,競態(tài)條件和內(nèi)存可見性,之前章節(jié)探討了解決這些問題的多種思路:
使用synchronized
使用顯式鎖
使用volatile
使用原子變量和CAS
寫時復(fù)制
使用ThreadLocal