作業 重新設置中斷狀態
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
//重新設置中斷狀態
Thread.currentThread().interrupt();
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
//重新設置中斷狀態
Thread.currentThread().interrupt();
}
2019-11-13
1.一個線程進入synchronized塊,鎖住本方法
2.判斷energyBoxes[from]能量不夠轉移的話就wait()進入等待池同時釋放鎖
3.其他線程執行完畢后,如果本線程剛好拿到鎖,就從wait()下一條語句執行,也就是while()判斷。(這也是我同事給我講了好久才反應過來的,用if下一次就不判斷了)。這時候energyBoxes[from]的值有可能被其他線程修改了,也就是說不一定滿足條件了
4.如果還是進入while,那就繼續執行3;否則跳出循環,執行后面語句。
2.判斷energyBoxes[from]能量不夠轉移的話就wait()進入等待池同時釋放鎖
3.其他線程執行完畢后,如果本線程剛好拿到鎖,就從wait()下一條語句執行,也就是while()判斷。(這也是我同事給我講了好久才反應過來的,用if下一次就不判斷了)。這時候energyBoxes[from]的值有可能被其他線程修改了,也就是說不一定滿足條件了
4.如果還是進入while,那就繼續執行3;否則跳出循環,執行后面語句。
2019-10-10