直接代码:
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(),就会变成单线程执行。