個人之見,請眾神指教
我在EnergySystem類中的將得到的能量值增加到目標能量盒中語句修改了一下:
System.out.println("======="?+?(energyBoxes[to]?+=?amount)?+?"=======");
用來驗證當前線程是否把前面的從源能量盒中得到的能量真的加到了目標能量盒中;
部分輸出如下:
由上面的結果可以看出,在大部分線程的執行過程中,并沒有執行到將得到的能量值加到目標能量盒中時資源就被其他線程搶占了,然而下下一條循環中,有可能將得到的能量值加到目標能量盒中,并執行到計算當前的總能量,因此,經過大量的循環,總能量就減少,也就是講師所說的共享的數據被破壞。
2017-04-11
能否發一下完整代碼,我按照你的描述測試完,總能量一直是不變的,轉移的能量也是在同步代碼當中進行,也真的加到了目標能量盒當中。不知道你的跳躍輸出是由于什么,睡眠時間的問題還是代碼的問題?