非常に単純なスレッドロジックを作成して競合状態を確認しましたが、予想外の動作が発生し、Javaのマルチスレッドに関する重要な概念が欠落していると思います。ここで子スレッドのスリープメソッドでメインスレッドもスリープする
は私のThreadクラスは
public class MyThreadDoinNothing implements Runnable {
private int count = 0;
@Override public void run() {
count++;
System.out.println(count);
}
}
だとここで私はMAINスレッドが〜1秒のために実行し、そのことで何が起こっているかcondition.Butレースで100の番号を印刷することが期待MAIN
public class MAIN {
public static void main(String[] args) throws InterruptedException {
Thread[] threads=new Thread[100];
Runnable object=new MyThreadDoinNothing();
for (int i=0;i<100;i++) {
threads[i] = new Thread(object);
threads[i].start();
threads[i].sleep(1000);
}
}
}
です100秒の全体プログラムを取っています。スレッド[i] .sleep(1000)は、MAINではなくスリープするように特定のスレッドのみを作成するべきです。
私はここで何が欠けているのか分かりません。
それはとてもうまく説明します。ありがとう! – leo017
@ leo017:デビッドは最初に同様の説明をしていました –