私はJavaのスレッドをテストするための小さなプログラムを作成しました。 問題は、私が予測したように結果を得ることができないことです:毎回100レコード。 私はレコード数がランダムです。と私はこの行のコメントを削除した後:Javaスレッドコレクションへのデータ出力に間違った結果が出ました
//System.out.println(名前+ "完了"。);
私は毎回100レコードを予測しています。 つまり、System.out.println()を追加すると、すべてが完璧に機能します。 これはJavaのバグか気付かなかったものですか?あなたは、ArrayListに同じpositon
に2つのthreads
書き込みデータ:
MyThread.java
public class MyThread extends Thread {
@Override
public void run() {
String name = Thread.currentThread().getName();
for (int i = 1; i <= 10; i++) {
if (i == 10) {
//System.out.println(name + " Completed.");
TestThread.al.add(name);
}
}
}
}
TestThread.java
import java.util.ArrayList;
public class TestThread {
public static ArrayList<String> al = new ArrayList<String>();
public static void main(String[] args) throws Exception {
ArrayList<MyThread> mt = new ArrayList<MyThread>();
//set
for (int i = 0; i < 100; i++) {
mt.add(new MyThread());
mt.get(i).setName("Worker " + (i + 1));
}
//start
for (int i = 0; i < 100; i++) {
mt.get(i).start();
}
//end
for (int i = 0; i < 100; i++) {
mt.get(i).join();
}
//result
for (int i = 0; i < al.size(); i++) {
System.out.println("Rank " + (i+1) + " : " + al.get(i));
}
}
}
私は、100行すべてのコメント付きの行とコメント付きの行がなくなりました。行のコメントを外すと、違いはランダムです。 – dkb
Vectorを使用した後、私は100のレコードとランダムな順序を持っています。スレッドテストは成功しました。 :) – Frank