1. 程式人生 > >那些年讀過的書《Java並發編程實戰》一、構建線程安全類和並發應用程序的基礎

那些年讀過的書《Java並發編程實戰》一、構建線程安全類和並發應用程序的基礎

修改 strong pad 應用程序 什麽 定義 表現 額外 構建

1、線程安全的本質和線程安全的定義

(1)線程安全的本質

並發環境中,當多個線程同時操作對象狀態時,如果沒有統一的狀態訪問同步或者協同機制,不同的線程調度方式和不同的線程執行次序就會產生不同的不正確的結果。要確保獲得最後正確的結果就需要對線程訪問對象狀態

的操作上進行同步或者協同,使多個線程無論在什麽樣的調度方式和線程執行順序的情況中,都能產生正確的結果。

線程安全的本質就對(對象)狀態的訪問操作進行統一管理,使之在不同的執行環境下均能產生正確的結果。也就是在不同的並發環境下,保持對象狀態的不變性,保證對象的不變性在不同的線程執行環境下不被破壞。

對象狀態的類型:可變的、不可變的、共享的、封閉的。不同類型的狀態訪問操作在多線程的訪問操作上呈現不同的特征。

對象狀態的類型

多線程訪問

可變的 可以修改對象狀態的值,肯能造成數據失效,線程不安全
共享的 可以修改對象狀態的值,肯能造成數據失效,線程不安全
不可變的 不可修改對象狀態的值,線程安全
封閉的 封閉在單個線程內,不在多個線程間共享,線程安全

(2)線程安全的定義

線程安全性定義:

當多個線程訪問某個類時,不管運行環境采用何種調度方式或者線程間如何交替執行,並且在主調代碼中不需要任何額外的同步或者協同,這個類都能表現出正確的行為,那麽就稱這個類是線程安全的。

2、多線程並發中遇到的問題

3、如何通過同步來避免多個線程同時訪問相同的數據?

4、如何共享和發布對象,使之能夠安全的被多個線程同時訪問?

(1)如何確保對象不被發布

(2)如何安全發布對象

那些年讀過的書《Java並發編程實戰》一、構建線程安全類和並發應用程序的基礎