一共有100個盒子,每個盒子中有一定數量的能量,每個執行緒持有乙個盒子,向其他盒子中注入能量,實現能量守恆。
public class energysystem/*** 能量轉移,從乙個盒子到另乙個盒子
*/public void
transfer(int from,int to,double amount) catch (interruptedexception e)
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.notifyall();
} }
/*** 獲取能量世界的能量總和
*/public double
gettotalenergies()
/*** 返回能量盒子的長度
*/public int
getboxamount()
}
public class energytransfertask implements runnable@override
public void
run()
} catch (interruptedexception e)
}}
public class energysystemtest}}
執行緒同步與互斥
與多程序互動一樣,各個不同的執行緒之間也會存在資源的共享問題。為了解決多執行緒之間對資源訪問的同步和互斥問題,我們需要了解執行緒同步機制。第一種機制 互斥鎖 互斥鎖是一種簡單的加鎖方法,可以使單個執行緒進行對資源訪問的原子操作。互斥鎖的基本操作就是加鎖和解鎖。互斥鎖主要包含以下函式 1 初始化函式 ...
執行緒同步與互斥
1.執行緒互斥 執行緒互斥是指某一資源同時只允許乙個訪問者對其進行訪問,具有唯一性和排它性。但互斥無法限制訪問者對資源的訪問順序,即訪問是無序的。同步就是協同步調,按預定的先後次序進行執行。如 你說完,我再說。同 字從字面上容易理解為一起動作 其實不是,同 字應是指協同 協助 互相配合。如程序 執行...
執行緒同步與互斥 互斥鎖
在多工作業系統中,同時執行的多個任務可能都需要使用同一種資源。這個過程有點類似於,公司部門裡,我在使用著印表機列印東西的同時 還沒有列印完 別人剛好也在此刻使用印表機列印東西,如果不做任何處理的話,列印出來的東西肯定是錯亂的。下面我們用程式模擬一下這個過程,執行緒一需要列印 hello 執行緒二需要...