我寫了一個測試java線程的小程序。 問題是,我無法得到我預測的結果:每次記錄100條記錄。 我得到了隨機數量的記錄。並刪除該行的註釋後:Java線程輸出數據到收集得到錯誤結果
//System.out.println(name+「Completed。」);
我每次都得到100條記錄。 換句話說,我添加了一個System.out.println(),一切都很完美。 這是java的bug還是我沒注意到的東西?
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