Javaの道 Javaに関する
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道 >  掲示板 >  掲示板(synchronizedが効いていません。教えてください。)
閲覧数:880
掲示板(synchronizedが効いていません。教えてください。)
名前
匿名
題名 synchronizedが効いていません。教えてください。
質問内容

質問を評価する
(0ポイント)
以下のようにsynchronizedを使ったのですが、balanceの結果が2000になりません。
やり方がおかしいのでしょうか?教えて頂きたく。
(t2.start()の箇所でデバッグで止めて、わざと時間を置くと2000になります。)

public class Account extends Thread {

    volatile private static int balance = 0;

    public void run() {
        deposit(1000);
    }
    
    synchronized public void deposit(int money){
        
        int total = balance + money;

        balance = total;
        
    }
   
   public static void main(String[] args) {

     Account t1 = new Account();

     Account t2 = new Account();

     t1.start();

     t2.start();
     
     System.out.print(balance);
   }    
}
質問日時 2013-02-15 01:37:22
名前
匿名
回答内容

回答を評価する
(0ポイント)
モニターが違うんだからそりゃそうなるでしょ。
回答日時 2013-02-15 17:23:22
名前
匿名
回答内容

回答を評価する
(0ポイント)
synchronizedを書く場所で、適用されるモノが何になるかを
理解せんとね。
回答日時 2013-02-15 20:37:16
名前
匿名
回答内容

回答を評価する
(0ポイント)
メインスレッドとは別で処理を開始するので
パターンとしては0のときと1000のときと2000の場合が
ある。

synchronizedもさておき、まずはThreadのお勉強だな。
回答日時 2013-02-16 02:42:09

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。



このページのトップへ
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道_CopyrightJavaの道