Java 併發程式設計實戰 第一部分小結
下列"併發技巧清單" 列舉了第一部分介紹的概念和規則
* 可變狀態是直觀重要的(it's mutable state, stupid)
所有的併發問題都可以歸結為如何協調對併發狀態的訪問,可變狀態越少,就越容易確保執行緒的安全性。
* 儘量將域宣告為final型別,除非需要他們是可變的
* 不可變物件一定是執行緒安全的
不可變物件極大地降低併發程式設計的複雜性,他們更為簡單而且安全,可以任意共享而無需使用枷鎖或保護性機制
* 封裝有助於管理複雜性
在編寫現車功能安全的程式時,雖然可以將所有的資料都儲存在全域性變數中,但為什麼要這樣做?將資料封裝在物件中,更易於維持不變性條件;將同步機制封裝在物件當中,更加易於遵循同步策略
* 用鎖來保護每一個可變變數
* 當保護同一個不變性條件中的所有變數時, 要使用用一個鎖
* 在執行符合操作期間,要持有鎖
* 如果從多個執行緒中訪問同一個可變變數時沒有同步機制,那麼程式會出現問題,
* 不要做故作聰明的推斷出不需要使用同步。
* 在設計過程中,考慮執行緒安全,或者在文件中明確的指出它不是執行緒安全的。
* 將同步策略文件化。
注:文件提到了多種同步方案,並解釋了為什麼有的行不通,以後補充上
相關推薦
Java 併發程式設計實戰 第一部分小結
下列"併發技巧清單" 列舉了第一部分介紹的概念和規則 * 可變狀態是直觀重要的(it's mutable state, stupid) 所有的併發問題都可以歸結為如何協調對併發狀態的訪問,可變狀態越少,就越容易確保執行緒的安全性。 * 儘量將域宣告為fina
【JAVA併發程式設計實戰】學習小結
第一章 簡介 摘書 執行緒會共享程序範圍內的資源,例如記憶體控制代碼和檔案控制代碼,但每個執行緒都有各自的程式計數器(Program Counter)、棧以及區域性變數等。 在同一個程式中的多
《Java併發程式設計實戰》—— 第一章 簡介
早期計算機 每次只能執行一個程式 作業系統 每次能執行多個程式,不同的程式都在單獨的程序中執行。 作業系統為各個獨立執行的程序分配各種資源,包括記憶體,檔案控制代碼以及安全證書等。 不同的程序之間可以通過一些粗粒度的通訊機制來交換資料,包括:套接字、訊號處理器、共享記憶體、訊號量
江疏影讀書系列之Java併發程式設計實戰(第一章 簡介)
欲速則不達,欲達則欲速! 12年畢業,化工、零售。16年轉行,Java培訓五個月,17年1月,我人生中最悲慘的一個月,找工作處處
《JAVA併發程式設計實戰》避免活躍性危險
文章目錄 死鎖 鎖順序死鎖 動態的鎖順序死鎖 在協作物件之間發生的死鎖 開放呼叫 資源死鎖 死鎖的避免和診斷 支援定時的鎖 使用執行緒轉儲資訊來分析死鎖 其他活躍性危
《JAVA併發程式設計實戰》取消和關閉
文章目錄 引言 任務取消 中斷 中斷策略 響應中斷 示例:計時執行 通過Future來實現取消 處理不可中斷的阻塞 採用newTaskFor封裝非標準的取消 停止基於執行緒的服務
《JAVA併發程式設計實戰》任務執行
文章目錄 線上程中執行任務 序列執行任務 顯式的為任務建立執行緒 無限制建立執行緒的不足 Executor框架 示例:基於Executor的Web伺服器 執行策略 執行緒池 Exe
《JAVA併發程式設計實戰》基礎構建模組
文章目錄 同步容器類 同步容器類的問題 迭代器和ConcurrentModificationException 隱藏迭代器 併發容器 ConcurrentHashMap 額外的原子Map操作
《JAVA併發程式設計實戰》物件的組合
文章目錄 設計執行緒安全的類 找出構成物件狀態的所有變數 示例 找出約束狀態變數的不變性條件 例項封閉 java監視器模式 示例:車輛追蹤 執行緒安全性的委託
【java併發程式設計實戰】—–執行緒基本概念
轉自 http://cmsblogs.com/?p=1638 共享和可變 要編寫執行緒安全的程式碼,其核心在於對共享的和可變的狀態進行訪問。 “共享”就意味著變數可以被多個執行緒同時訪問。我們知道系統中的資源是有限的,不同的執行緒對資源都是具有著同等的使用權。有限、公平就意味著競爭
讀書筆記(java併發程式設計實戰——CompletionService)
原文請參考微信公眾號(歡迎關注公眾號:coding_song):https://mp.weixin.qq.com/s/R50Eh4kTDtA031i-yMUZAw Callable&Future Callbale描述的是抽象的計算任務,有明確的起點,並且最終會結束
《Java併發程式設計實踐——第一章(介紹)、第二章(執行緒安全)》
介紹## 1.1 併發的簡短歷史 相同的關注點(資源利用,公平和方便) 不僅促進了程序的發展,也促進了執行緒的發展、 執行緒允許程式控制流的多重分支同時存在於一個程序。它們共享程序範圍內的資源,比如記憶體和檔案控制代碼,但是執行緒有自己的程式計數器、棧、和本地變數。 1.2
Java併發程式設計實戰 - 學習筆記
第2章 執行緒安全性 1. 基本概念 什麼是執行緒安全性?可以這樣理解:一個類在多執行緒環境下,無論執行時環境怎樣排程,無論多個執行緒之間的執行順序是什麼,且在主調程式碼中不需要進行任何額外的同步,如果該類都能呈現出預期的、正確的行為,那麼該類就是執行緒安全的。 既然這樣,那麼安
Java併發程式設計實戰:閉鎖CountDownLatch,柵欄CyclicBarrier與訊號量Semaphore
整體上對三個概念進行一個說明: CountDownLatch和CyclicBarrier都能夠實現執行緒之間的等待,只不過它們側重點不同: CountDownLatch是閉鎖,相當於一扇門:在閉鎖達到結束狀態之前,這扇門一直是關閉的,並且沒有任何執行緒能夠通過,當到達結束
Java併發程式設計實戰————Semaphore訊號量的使用淺析
引言 本篇部落格講解《Java併發程式設計實戰》中的同步工具類:訊號量 的使用和理解。 從概念、含義入手,突出重點,配以程式碼例項及講解,並以生活中的案例做類比加強記憶。 什麼是訊號量 Java中的同步工具類訊號量即計數訊號量(Counting Semaphore),是
Java併發程式設計實戰————物件的組合
引言 物件的組合,是《Java Concurrency in Practice》中第四章引入的課題。這並不是一個併發的概念。 為了可以將現有的執行緒安全元件組合為更大規模的元件或程式,而不是每次記憶體訪問都進行分析以確保程式是執行緒安全的。這一章將介紹一些組合模式,這些模式可以更容易的使
Java併發程式設計實戰————售票問題
引言 現有一個需求如下: 有10000張火車票,每張票都有一個編號,同時有10個視窗對外售票,如何確保車票的正常售賣? 程式一:使用List 問題的解決辦法都是從我們最最熟悉的角度思考。程式一,我們使用一個普通的List作為方案。 閱讀以下程式碼,觀察執行結果: publ
Java併發程式設計實戰————ThreadLocal
一、引言 ThreadLocal是Java幫助實現執行緒封閉性的典型手段。 作用:提供執行緒內的區域性變數,這種變數線上程的生命週期內起作用,減少同一個執行緒內多個函式或元件之間一些公共變數的傳遞複雜度。同時也用來維護執行緒中的變數不被其他執行緒干擾。 這個類能使執行緒中的某個值與儲
《java併發程式設計實戰》之 物件共享
解決問題: 如何共享和釋出物件,從而使它們能夠安全地由多個執行緒同時訪問 寫多執行緒注意兩點 防止某個執行緒正在使用物件狀態時,而另一個執行緒同時在修改狀態。 確保當一個執行緒修改了物件狀態後,其他執行緒能夠看到狀態變化。(同步的記憶體可見性) 1.可見性
《java併發程式設計實戰》之 執行緒安全性
1.執行緒安全性 當多個執行緒訪問某個類時,不管執行時環境採用何種排程方式或者這些執行緒將如何交替執行,並且在主調程式碼中不需要任何額外的同步或協同,這個類都能表現出正確的行為,那麼這個類就是執行緒安全的。 無狀態物件一定是執行緒安全的,何為無狀態,就是類中不包含任何域,也不包含各種其