[問題] Thread 用 runnable 的疑問

看板java作者 (ggggy)時間18年前 (2008/01/08 03:23), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串1/2 (看更多)
我想問的是 在用 runnable 來做多執行緒時 join() 是當執行緒都 start 後 被join的執行緒 必須執行完才能換下一個 可是我的程式碼如下 //THREAD 函數 class WorkerThread implements Runnable{ /*宣告 變數 */ public WorkerThread(參數){ this.宣告=參數; } public void run(){ /*calculate*/ for () { } System.out.println("123"); System.out.println("456"); System.out.println("789"); } } public class matrix { public static void main(String[] args) { /* create thread*/ Thread []workers = new Thread[9]; for ( row=0; row<3 ; row++) { for (col=0 ; col<3 ; col++) { workers[x] =new Thread (new WorkerThread(參數)); x++; } } for(int k=0;k<NUM_THREADS-1;k++){ /*Start thread*/ workers[k].start(); } for(int k=0;k<NUM_THREADS-1;k++){ try{ workers[k].join(); //thread finished }catch (InterruptedException ie) {} } } } ------------------------------ 在 main 中 有9個 THREAD 然後 用2個迴圈(作業要求)傳參數給THREAD 的CLASS 再來的迴圈是啟動 執行緒 再來的迴圈是 使用 join() 可是當我 執行時 thread 中的 run() 裡面的 println() 被分開執行了 應該是被其他執行緒搶用了 就是他不會輸出 123 456 789 會變成 123 123 456 789 123 後來我把 println() 都用一個 print() 來表示 就好了 請問一下: 這是join()的觀念不對嗎? 為什麼 不是等 run()中的都執行完才換下一個呢? 要如何修正呢? 謝謝大家~~!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.117.199.160

01/08 13:36, , 1F
因為 main 也是一條 thread, 所以是這條在等另一個 thread 完
01/08 13:36, 1F
文章代碼(AID): #17WdmoTa (java)
文章代碼(AID): #17WdmoTa (java)