天天看點

《Java線程與并發程式設計實踐》—— 2.6 小結

本節書摘來異步社群《java線程與并發程式設計實踐》一書中的第2章,第2.6節,作者: 【美】jeff friesen,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

線程互動通常是通過共享變量完成的,當線程之間沒有互動,開發多線程的應用程式會變得簡單許多。一旦發生了互動,競态條件、資料競争以及緩存變量等誘發線程不安全(在多線程環境下不正确)的因素就會暴露出來。

你可以使用同步解決之前的線程問題。同步是jvm的一個特性,旨在保證兩條或者兩條以上并發的線程不會同時進入同一塊臨界區。臨界區就是必須以串行方式通路的一段代碼塊。

活躍性這個詞代表着某件正确的事情最終會發生。活躍性失敗發生在應用程式觸及一種無法繼續執行的狀态。在單線程的應用程式中,無限循環就是一個例子。多線程應用程式面臨着諸如死鎖、活鎖和餓死的額外挑戰。

同步展示了兩種屬性:互斥性和可見性。synchronized關鍵字與兩者都有關系。java同時也提供了一種更弱的、僅僅包含可見性的同步形式,并且隻以volatile關鍵字關聯。

當一個屬性變量聲明成volatile,就不能同時聲明成final的。不過,由于java可以讓你安全地通路final的屬性而無需同步,這也就不能稱之為一個問題了。以後你會經常使用final來確定在不可變(不會發生改變)類的上下文中線程的安全性。

第3章會涉及等待和通知相關的話題。

本文僅用于學習和交流目的,不代表異步社群觀點。非商業轉載請注明作譯者、出處,并保留本文的原始連結。