1
下面是創建線程,數組的代碼啓動它們,然後調用加入他們:Java線程加入for循環,未知行爲輸出
public class JoinExample {
private static class CodeForThread implements Runnable {
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName() + " " + i);
}
}
}
public static void main(String[] args) throws InterruptedException {
Thread[] threads = new Thread[100];
for (int i = 0; i < 100; i++){
threads[i] = new Thread(new CodeForThread());
threads[i].start();
}
for (int i = 0; i < threads.length; i++) {
threads[i].join();
}
System.out.println("All Done");
}
}
我知道,加入等待線程在繼續之前死亡,並且線程可能不按順序調用,但仍將完成其任務。問題是我的輸出中有這麼多異常。有人可以解釋爲什麼這樣的事情可能會發生:
Thread-60 0
Thread-60 1
Thread-60 2
Thread-60 3
Thread-60 4
Thread-97 0 //***
Thread-59 0
Thread-59 1
Thread-59 2
Thread-59 3
Thread-59 4
這是因爲那是在進入連接循環之前計劃開始的線程之一嗎?
線程97輸出的其餘部分應該在下面的某處。不是嗎? – GurV