在write和方法上加synchronized不能保證結果一定是6
使用synchronized實現可見性時,在wriite和read方法上都加上了這個關鍵字,但是main方法中啟動的是兩個線程,如果參數為false的先執行,那么結果就是0,程序的運行結果中確實還是可能是6或者0,請老師幫忙確認下
使用synchronized實現可見性時,在wriite和read方法上都加上了這個關鍵字,但是main方法中啟動的是兩個線程,如果參數為false的先執行,那么結果就是0,程序的運行結果中確實還是可能是6或者0,請老師幫忙確認下
2019-11-24
舉報
2019-12-01
synchronized分為對象鎖和類鎖。加在非靜態方法上的鎖是對象鎖,由于main中new了兩個實例,write和read方法是不同對象,因此兩個鎖不是同一把鎖,不具有互斥性。
所以出現0和6的原因就是出現在處理器的重排序原因。兩個線程同時啟動,但是先執行哪個線程是有處理器決定的。如果是讀線程先執行,結果就是0;如果是寫線程先執行就是6;
如有問題請指正。