両方のスレッドで変数を共有したいのですが、実行時に1と2ではなく2を2回出力することがあります。
public class man implements Runnable{
int value = 0;
public static void main(String[] args){
Runnable job = new man();
Thread work1 = new Thread(job);
work1.setName("Thread1");
Thread work2 = new Thread(job);
work2.setName("Thread2");
work1.start();
work2.start();
}
public void run(){
synchronized(this){
value = value + 1;
}
System.out.println("VALUE = " + value +", Running " + Thread.currentThread().getName());
}
}
出力は次の場合があります。
VALUE = 2, Running Thread2
VALUE = 2, Running Thread1
その他の時間は次のとおりです。
VALUE = 1, Running Thread2
VALUE = 2, Running Thread1
なぜこうなった?私はHeadFirstの本でJavaを学んでいて、この質問が出てきました。
System.out.println
呼び出し内でアクセスを同期していないため、「最初のスレッド」が出力される前に「2番目の」スレッドが増加することがあります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加