Synchronized解決銀行取錢問題

當多個線程同時訪問共同的資源並進行修改時,會產生錯誤,例如銀行取錢的問題:

新建一個Acount.java,用來封裝銀行賬戶和餘額,代碼如下:



在新建一個FirstThread.java,用來表示當前線程:


運行結果,賬戶餘額會出現負數,很明顯,當其中一個線程取錢時,另一個線程也同時取錢,運行結果如下:



這時應對賬戶acount進行加鎖,即使用synchronized關鍵字,對其進行加鎖後,當有線程訪問時,會獲得鎖,並對其資源進行修改操作,其他的線程只有當該線程修改完成後並且釋放鎖,才能對其訪問,這種加鎖--修改--釋放鎖的模式就解決了多個線程同時修改資源而造成的錯誤。

在FristThread.java上圖的代碼中,把11行和27行註釋去掉即可,其運行結果爲:



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章