1. 程式人生 > >JAVA多執行緒之基礎部分

JAVA多執行緒之基礎部分

public void transfer(int from, int to, double amount){
synchronized(lockObj){
// if (energyBoxes[from] < amount)
// return;
//while迴圈,保證條件不滿足時任務都會被條件阻擋
//而不是繼續競爭CPU資源
while (energyBoxes[from] < amount){
try {
//條件不滿足, 將當前執行緒放入Wait Set
lockObj.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}

System.out.print(Thread.currentThread().getName());
energyBoxes[from] -= amount;
System.out.printf("從%d轉移%10.2f單位能量到%d", from, amount, to);
energyBoxes[to] += amount;
System.out.printf(" 能量總和:%10.2f%n", getTotalEnergies());
//喚醒所有在lockObj物件上等待的執行緒

lockObj.notifyAll();