java多執行緒同步資源上的問題

2021-04-15 12:09:22 字數 715 閱讀 3116

1樓:匿名使用者

程式的執行

copy結果出現了一次或幾次負

bai數,或者資金du不能剩餘的高zhi

低排列。原因分析:

兩個執行緒同dao時訪問account賬戶,這就形成了共享資源,具體到程式中:

當th1執行 if (account.checkbalance() - 600.5 > 0)時,假如剩下的資金還為900,則th1繼續往下執行(sleep),但此時之前掛起的th2甦醒(從sleep中醒來),執行account.

withdraw(600.5f)操作,於是賬戶僅剩下299.5f,再當th1執行account.

withdraw(600.5f)操作時,必然得出錯誤的結果。

如果把sleep()遮蔽是否能出現正確的結果,依舊不能,因為無法預料執行緒的執行順序或中斷。

解決辦法:將對account的賬戶操作改為序列化(加鎖)更進一步的討論,我等著你

2樓:匿名使用者

用的方式就是加鎖。當然,加鎖的方式有很多,給每乙個物件設定乙個鎖,或對於物件導向回的言語來說,在外答麵包一層訪問介面,在這個介面之下做保護也是乙個好的辦法。

另外,通過支援同步的佇列在不同執行緒之間傳遞物件也是下個辦法。

總之,多執行緒是乙個複雜的問題,不是一兩句可以將清的。建議多看看相關的書。

3樓:

進來學習的 居然排第乙個

求java書籍,求java書籍推薦

皋空緒敏慧 可以在網上搜搜教程,不過沒有基礎的話,會舉步維艱,如果有個老師帶一下的話會好很多的! 總覺得書很枯燥。跟著老師或同學,多做實踐。理論瞭解就好,如果你做研究的話,另當別論。求經典書籍的推薦? 柴小余 1 百年孤獨 2 活著 3 老人與海 4 包法利夫人 5 麥田裡的守望者 6 四大名著 7...

java怎麼清空char陣列,java 怎麼清空一個char陣列

那要看你想怎麼清空了,保留陣列長度清空的話 char chs chs new char chs.length 不保留陣列長度清空的話 chs new char 0 將陣列物件置空的話 chs null 實在想不出你想怎麼清空。上面那些回答真的無語,什麼把length 0 陣列的長度是final修飾的...

cad多段線arc怎麼用,cad 多段線 arc怎麼用

繪製多段線arc,需要用到引數a,操作步驟具體如下 如圖所示,單擊 多段線 命令按鈕,提示 指定起點 在繪圖區域合適位置單擊指定起點,提示 指定下一點 輸入引數a,按enter鍵確認。如圖所示,提示 指定圓弧的端點 圖中顯示 如果指定的圓弧端點在起點左 下側,則繪製劣弧 如果指定的圓弧端點在起點右 ...