【連載】第2章-2.1什麼是線程安全性 共享和可變 什麼是線程安全性 無狀態 知識點

格言:在程序猿界混出點名堂!

《JAVA併發編程實戰》解讀
【連載】第2章-2.1什麼是線程安全性

回顧:第一章主要介紹線程的簡史,讓大家知道什麼是線程,線程存在哪裏,利和弊是什麼,這一章會爲後面的章節打下基礎,介紹什麼是線程安全性。

共享和可變

共享意味着變量可以被多線程同時訪問,這個很好理解。
可變則意味着變量的值在其生命週期內可以發生變化。相對不可變而言,比如Java中我們熟悉的關鍵字final,如果變量是final就不存在線程安全問題。
因此,共享可變是造成線程不安全的必然條件,因此有以下三種方式可以避免不安全的發生:

  • 變量不共享,多線程依次訪問或者單線程訪問。
  • 使用不可變變量
  • 多線程訪問使用同步。

什麼是線程安全性

書中說了幾個段落,其實就一句話:所見即所知(We know it when we see it.)。就是程序表現出來的行爲和狀態和你所期望的是一致的。

無狀態

無狀態一定是線程安全的

書中講的就是Servlet的示例代碼,大概意思就是方法中使用的都是局部變量,不存在共享變量,這個Servlet也就是線程安全。無狀態也就是沒有共享變量的意思,也就是沒有共享狀態。見書中例子:

@ThreadSafe
public class StatelessFactorizer implements Servlet{
  public void service(ServletRequest req, ServletResponse resp){
   BigInteger I = extractFromRequest(req);
   BigInteger[] factors = factor(i);
   encodeIntoResponse(resp,factors);
  }
}

知識點

  1. 共享和可變是導致線程出現不安全的條件。
  2. 線程安全性的理解:所見即所知。
  3. 什麼是無狀態。

喜歡連載可關注簡書或者微信公衆號
簡書專題:Java併發編程實戰-可愛豬豬解讀
https://www.jianshu.com/c/ac717321a386
微信公衆號:逗哥聊IT

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章