執行緒互斥與同步案例

2021-07-31 17:26:25 字數 977 閱讀 7325

一共有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 執行緒二需要...