多執行緒經典案例 模仿儲戶取錢

2021-07-25 02:45:49 字數 1916 閱讀 8579

銀行取錢肯定不能透支這個是眾所周知的,實現此功能就需要借助多執行緒的知識!

先來看一下採取同步措施前產生的結果:

好的,我們先來定義乙個賬戶類:

/**

* 賬戶類,含卡號,還有餘額 通過同步方法防止出現餘額為負的情況

* * @author mr.gao

*/public class account

public string getaccountno()

public void setaccountno(string accountno)

public double getbalance()

public void setbalance(double balance)

public int hashcode()

public boolean equals(object obj) else if (!accountno.equals(other.accountno))

return false;

if (double.doubletolongbits(balance) != double

.doubletolongbits(other.balance))

return false;

return true;

} public string tostring()

/*** 同步取錢方法,防止餘額為負

* @param accountamount

*/public synchronized void draw(double accountamount) catch (interruptedexception e)

balance -= accountamount;

system.out.println("餘額為\t" + balance);

} else

}}

定義乙個執行緒類,主要演示同步方法,注釋的部分為同步**塊的內容:

/**

* 取錢執行緒採用的是繼承的方式

* 無須自己實現取錢的操作,直接呼叫account的draw()方法實現,符合"加鎖--修改--釋放鎖"的邏輯

* 符合 領域驅動設計(每個類都是完整的領域物件,例如使用者賬戶提供相應的方法去處理賬戶所對應的需求)

* @author mr.gao

* */

public class drawthread extends thread

public void run() catch (interruptedexception e)

// account.setbalance(account.getbalance() - drawamount);

// system.out.println("餘額為\t" + account.getbalance());

//// } else

// }

/** 直接呼叫account物件的draw()方法,同步方法的同步監視器是this,

* this代表呼叫draw()方法的物件,也就是說,再進入draw()方法前先對account物件進行加鎖

*/account.draw(drawamount);

}}

測試**:

/**

* 結果測試

* * @author mr.gao

* */

public class accounttest

}

輸出效果:

Java多執行緒經典案例

1.三個售票視窗同時 20張票 public class demo1 class ticketoffice implements runnable override public void run else catch interruptedexception e 2.建立兩個執行緒,其中乙個輸出1...

QThread多執行緒程式設計經典案例分析

傳統的圖形介面應用程式都只有乙個執行緒執行,並且一次執行乙個操作。如果使用者呼叫乙個比較耗時的操作,就會凍結介面響應。乙個解決方法是按照事件處理的思路 另外乙個解決方法是 採用多執行緒。qt qthread多執行緒程式設計的方法一直有個爭議,就是bradley t.hughes you re doi...

QThread多執行緒程式設計經典案例分析

傳統的圖形介面應用程式都只有乙個執行緒執行,並且一次執行乙個操作。如果使用者呼叫乙個比較耗時的操作,就會凍結介面響應。乙個解決方法是按照事件處理的思路 另外乙個解決方法是 採用多執行緒。qt qthread多執行緒程式設計的方法一直有個爭議,就是bradley t.hughes you re doi...