線程安全問題如何判斷一個類是否是線程安全的?
線程安全性類要成為線程安全的,首先必須在單線程環境中有正確的行為。如果一個類實現正確(這是說它符合規格說明的另一種方式),那么沒有一種對這個類的對象的操作序列(讀或者寫公共字段以及調用公共方法)可以讓對象處于無效狀態,觀察到對象處于無效狀態、或者違反類的任何不可變量、前置條件或者后置條件的情況。
此外,一個類要成為線程安全的,在被多個線程訪問時,不管運行時環境執行這些線程有什么樣的時序安排或者交錯,它必須仍然有如上所述的正確行為,并且在調用的代碼中沒有任何額外的同步。
其效果就是,在所有線程看來,對于線程安全對象的操作是以固定的、全局一致的順序發生的。
正確性與線程安全性之間的關系非常類似于在描述 ACID(原子性、一致性、獨立性和持久性)事務時使用的一致性與獨立性之間的關系:從特定線程的角度看,由不同線程所執行的對象操作是先后(雖然順序不定)而不是并行執行的。