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