直接代码:
public static void main(String[] args) {
List<Thread> list = new ArrayList();
for (int k = 0; k < 10; k++) {
Thread t = new MyThread(k);
list.add(t);
}
for (Thread t : list) {
t.start();
}
int n = 0;
for (Thread t : list) {
try {
t.join();
n++;
System.out.println("结束" + n);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("完全结束");
}
static class MyThread extends Thread {
int id;
private MyThread(int id) {
super();
this.id = id;
}
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println("k=" + id + ":" + i);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
输出:
...
...
k=4:8
k=7:8
k=8:8
k=5:9
k=2:9
k=6:9
k=1:9
k=9:9
k=0:9
k=3:9
k=4:9
k=7:9
k=8:9
结束1
结束2
结束3
结束4
结束5
结束6
结束7
结束8
结束9
结束10
完全结束
如果把一个线程start()后立即join(),就会变成单线程执行。