2017-02-02 9 views
0

私はJavaスレッドで少し実験していますが、別のクラスのスレッドで私のクラスのnumberという変数を変更しようとしています。
しかし明らかにそれは機能しません、私はいつも私が自分の価値を始めたときから0を得ました、誰かが私に理由を教えるかもしれません。Javaスレッドが機能しない

これが私の最初のクラスです:

Threadの
public class ThreadTest { 
public int number = 0; 
public static void main(String[] args) { 
    ThreadTest Adding = new ThreadTest(); 
    Adding.addingOnes(); 
    System.out.println(Adding.number); 
} 
public void addingOnes() { 
    Runnable thread1 = new ThreadClassPlus(); 
    Thread t1 = new Thread(thread1); 
    t1.start(); 
    try { 
    t1.join(); 
    } catch (InterruptedException e) { 
    e.printStackTrace(); 
    } 
} 
public void add() { 
    number++; 
} 
} 

そして、私の第二のクラス:

public class ThreadClassPlus extends ThreadTest implements Runnable 
{ 
    public void run() 
    { 
    for(int i = 0; i < 10000; i++) 
    { 
     add(); 
    } 
    } 
} 
+0

スレッドを開始した直後にスレッドに参加するのは決して意味がありません。それはスレッドに関する何かを知るのに役立つかもしれませんが、実際のプログラムでこれを行うのは決して意味がありません。 –

答えて

1

ThreadTestインスタンスとThreadClassPlusインスタンスが異なるオブジェクトであるという問題があります。あなたのスレッドは後者の例ではnumberをインクリメントしていますが、mainメソッドは前者からnumberという値を読み取ります。当然、前者は後者の価値を持たない。

スレッドが正常に動作しています。問題はそれをどのように使用しているかにあります。ここで

が修正バージョンです:

public class ThreadTest implements Runnable { 

    public int number = 0; 

    public static void main(String[] args) { 
     ThreadTest adding = new ThreadTest(); 
     adding.addingOnes(); 
     System.out.println(adding.number); 
    } 

    public void addingOnes() 
     Thread t1 = new Thread(this); 
     t1.start(); 
     try { 
      t1.join(); 
     } 
     catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 

    public void add() { 
     number++; 
    } 

    public void run() { 
     for(int i = 0; i < 10000; i++) { 
      add(); 
     } 
    } 
} 

慎重に私が作った様々なスタイルの変化に注意してください。 Javaスタイルは重要です。

0

の値を印刷しているときに、thread1オブジェクトに属する変数numberの値を増加しているというだけの理由変数numberはオブジェクトAddingに属します。

だけプリントアウト適切な変数値、あなたが期待した結果が表示されます: dding =>A

System.out.println(((ThreadClassPlus)thread1).number); 

そしてところで、大文字で始まる変数に名前を付けないでください、これは非常に悪いスタイルですがディング。

関連する問題