1. 程式人生 > 其它 >Java併發學習10:執行緒安全分析

Java併發學習10:執行緒安全分析

技術標籤:java併發程式設計java多執行緒

1、變數

1.1 成員變數和靜態變數
  • 如果它們沒有共享,則執行緒安全
  • 如果它們被共享了,根據它們的狀態是否能夠改變,又分兩種情況
    • 如果只有讀操作,則執行緒安全
    • 如果有讀寫操作,則這段程式碼是臨界區,需要考慮執行緒安全
1.2 區域性變數
  • 區域性變數是執行緒安全的
  • 但區域性變數引用的物件則未必
    • 如果該物件沒有逃離方法的作用訪問,它是執行緒安全的
    • 如果該物件逃離方法的作用範圍,需要考慮執行緒安全

2、常見執行緒安全類

String
Integer等包裝類
StringBuffer
Random
Vector
Hashtable
java.util.
concurrent 包下的類

這裡說它們是執行緒安全的是指,多個執行緒呼叫它們同一個例項的某個方法時,是執行緒安全的。

  • 它們的每個方法是原子的
  • 但它們多個方法的組合不是原子的

在這裡插入圖片描述

3、不可變類

String、Integer 等都是不可變類,因為其內部的狀態不可以改變,因此它們的方法都是執行緒安全的