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