2012年11月5日 星期一

Thread.join()

之前搞不太清楚 Thread 裡面的 join() 函式的用途,最近終於搞清楚了~
一般來說因為 Thread 是非同步的執行,因此當新的 Thread 被產生出來之後,跟原本的 Thread 的執行順序就不保證了
但有時我們還是會想要等某個 Thread 執行完畢以後,現在的 Thread 再繼續執行
這時就可以利用 join() 函式去等待。

範例程式碼如下:
int times = 100;
Thread[] ts = new Thread[times];

for(int i=0 ; i<times ; i++) {
  Thread t = new Thread(new Test());
  ts[i] = t; // Add to array
  t.start();
}

for(int i=0 ; i<times ; i++) {
  try {
    ts[i].join();
  } catch (Exception e) {
    e.printStackTrace();
  }
}

System.out.println("done.");

這樣子的寫法,done 那行就會在前面 100 個 Thread 全都結束後才會印出來。

參考資料:
1、How to wait for a set of threads to complete?

沒有留言: