1. 程式人生 > >java volatile詳解

java volatile詳解

NoVisibility可能會持續迴圈下去,因為讀執行緒可能永遠都看不到ready的值。一種更奇怪的現象是,Novisibility可能會輸出0,因為讀執行緒可能看到了寫入ready的值,但卻沒有看到之後寫入number的值,這種現象被稱為“重排序(Reordering)“。只要在某個執行緒中無法檢測到重排序情況,(即使在其他執行緒中可以很明顯地看到該執行緒中的重排序),那麼就無法確保執行緒中的操作將按照程式中指定的順序來執行。當主執行緒首先寫入number,然後在沒有同步的情況下寫入ready,那麼讀執行緒看到的順序可能與寫入的順序完全相反。