亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

淺談Java由于不當?shù)膱?zhí)行順序?qū)е碌乃梨i

瀏覽:43日期:2022-08-11 14:07:49

我們來討論一個經(jīng)常存在的賬戶轉(zhuǎn)賬的問題。賬戶A要轉(zhuǎn)賬給賬戶B。為了保證在轉(zhuǎn)賬的過程中A和B不被其他的線程意外的操作,我們需要給A和B加鎖,然后再進行轉(zhuǎn)賬操作, 我們看下轉(zhuǎn)賬的代碼:

public void transferMoneyDeadLock(Account from,Account to, int amount) throws InsufficientAmountException { synchronized (from){synchronized (to){ transfer(from,to,amount);} }}private void transfer(Account from,Account to, int amount) throws InsufficientAmountException { if(from.getBalance() < amount){throw new InsufficientAmountException(); }else{from.debit(amount);to.credit(amount); }}

看起來上面的程序好像沒有問題,因為我們給from和to都加了鎖,程序應該可以很完美的按照我們的要求來執(zhí)行。

那如果我們考慮下面的一個場景:

A:transferMoneyDeadLock(accountA, accountB, 20)B:transferMoneyDeadLock(accountB, accountA, 10)

如果A和B同時執(zhí)行,則可能會產(chǎn)生A獲得了accountA的鎖,而B獲得了accountB的鎖。從而后面的代碼無法繼續(xù)執(zhí)行,從而導致了死鎖。

對于這樣的情況,我們有沒有什么好辦法來處理呢?

加入不管參數(shù)怎么傳遞,我們都先lock accountA再lock accountB是不是就不會出現(xiàn)死鎖的問題了呢?

我們看下代碼實現(xiàn):

private void transfer(Account from,Account to, int amount) throws InsufficientAmountException { if(from.getBalance() < amount){throw new InsufficientAmountException(); }else{from.debit(amount);to.credit(amount); }}public void transferMoney(Account from,Account to, int amount) throws InsufficientAmountException { int fromHash= System.identityHashCode(from); int toHash = System.identityHashCode(to); if(fromHash < toHash){synchronized (from){ synchronized (to){transfer(from,to, amount); }} }else if(fromHash < toHash){synchronized (to){ synchronized (from){transfer(from,to, amount); }} }else{synchronized (lock){synchronized (from) { synchronized (to) {transfer(from, to, amount); } }} }}

上面的例子中,我們使用了System.identityHashCode來獲得兩個賬號的hash值,通過比較hash值的大小來選定lock的順序。

如果兩個賬號的hash值恰好相等的情況下,我們引入了一個新的外部lock,從而保證同一時間只有一個線程能夠運行內(nèi)部的方法,從而保證了任務的執(zhí)行而不產(chǎn)生死鎖。

以上就是淺談Java由于不當?shù)膱?zhí)行順序?qū)е碌乃梨i的詳細內(nèi)容,更多關(guān)于Java由于不當?shù)膱?zhí)行順序?qū)е碌乃梨i的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標簽: Java
相關(guān)文章:
主站蜘蛛池模板: 国产伦精品一区二区三区精品 | 国产综合视频在线 | 免费精品国产 | 国产成人一区二区三区 | 欧美日韩一区二区视频图片 | 看黄色一级毛片 | 一级毛片免费观看视频 | 理论亚洲区美一区二区三区 | 一区二区三区视频网站 | 高清大学生毛片一级 | 青青草青青操 | 国产三级视频在线播放 | 久久一本日韩精品中文字幕屁孩 | 18年大片免费在线观看 | 亚洲综合精品一区二区三区中文 | 福利一区二区在线观看 | 成人国产在线视频在线观看 | 国产露脸对白刺激3p在线 | 久久精品福利视频在线观看 | 嘿嘿嘿视频免费网站在线观看 | 在线观看91精品国产入口 | 国产一久久香蕉国产线看观看 | 婷婷色天使在线视频观看 | 关婷哪一级毛片高清免费看 | 精品视频vs精品视频 | 香蕉片视频在线观看 | 成人黄色免费网站 | 日韩中文字幕视频在线观看 | 青草视频在线观看免费视频 | 欧美日韩系列 | 日韩一区二区不卡 | 操美女国产 | 国产高清毛片 | 日韩特级片| 视频在线二区 | 亚洲成a人v天堂网 | 国产精品宾馆在线精品酒店 | 国产乱理伦片在线观看大陆 | 国产成人精品免费视频大全软件 | 国产欧美在线观看 | 日本中文字幕一区二区 |