熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java高級技術 >> 正文

Java開發中多線程同步技巧[3]

2013-11-23 19:55:25  來源: Java高級技術 

    為什麼會出現這樣的問題?這就是多線程中的同步的問題在我們的程序中Account中的amount會同時被多個線程所訪問這就是一個競爭資源通常稱作競態條件對於這樣的多個線程共享的資源我們必須進行同步以避免一個線程的改動被另一個線程所覆蓋在我們這個程序中Account中的amount是一個競態條件所以所有對amount的修改訪問都要進行同步我們將deposit()和withdraw()方法進行同步修改為

 
public synchronized void deposit(float amt)
{
 float tmp = amount;
 tmp += amt;
 try
 {
  Threadsleep();
  //模擬其它處理所需要的時間比如刷新數據庫等
 }
 catch (InterruptedException e)
 {
  // ignore
 }
 amount = tmp;
}
  public synchronized void withdraw(float amt)
{
 float tmp = amount;
 tmp = amt;
 try
 {
  Threadsleep();
  //模擬其它處理所需要的時間比如刷新數據庫等
 }
 catch (InterruptedException e)
 { // ignore }
  amount = tmp;
}

    此時再運行我們就能夠得到正確的結果了Account中的getBalance()也訪問了amount為什麼不對getBalance()同步呢?因為getBalance()並不會修改amount的值所以同時多個線程對它訪問不會造成數據的混亂

[]  []  []  


From:http://tw.wingwit.com/Article/program/Java/gj/201311/27674.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.