Java併發學習10:執行緒安全分析
阿新 • • 發佈:2021-01-27
技術標籤:java併發程式設計java多執行緒
1、變數
1.1 成員變數和靜態變數
- 如果它們沒有共享,則執行緒安全
- 如果它們被共享了,根據它們的狀態是否能夠改變,又分兩種情況
- 如果只有讀操作,則執行緒安全
- 如果有讀寫操作,則這段程式碼是臨界區,需要考慮執行緒安全
1.2 區域性變數
- 區域性變數是執行緒安全的
- 但區域性變數引用的物件則未必
- 如果該物件沒有逃離方法的作用訪問,它是執行緒安全的
- 如果該物件逃離方法的作用範圍,需要考慮執行緒安全
2、常見執行緒安全類
String
Integer等包裝類
StringBuffer
Random
Vector
Hashtable
java.util. concurrent 包下的類
這裡說它們是執行緒安全的是指,多個執行緒呼叫它們同一個例項的某個方法時,是執行緒安全的。
- 它們的每個方法是原子的
- 但它們多個方法的組合不是原子的
3、不可變類
String、Integer 等都是不可變類,因為其內部的狀態不可以改變,因此它們的方法都是執行緒安全的