一、join()加入執行緒
呼叫join()方法後,主線程會進入阻塞,直到呼叫join()的執行緒執行完成,才繼續回到主線程。
join()方法使用思路:join()方法主要由使用執行緒的程式使用,將大問題分解為許多個小問題,每個小問題分配乙個執行緒,當所有小問題都解決完後,再回到主線程進行進一步操作。
class thread1 extends thread
public void run()
}class thread2 implements runnable
}class thread_join
} }}
輸出結果:
mainthread 1
thread-1 1
mainthread 2
thread-1 2
thread-1 3
mainthread 3
thread-1 4
mainthread 4
thread-1 5
mainthread 5 //i=5,主線程進入阻塞,直至thread-2執行完成
thread-1 6
thread-1 7
thread-1 8
thread-1 9
thread-2 1
thread-2 2
thread-2 3
thread-2 4
thread-2 5
thread-2 6
thread-2 7
thread-2 8
thread-2 9
mainthread 6
mainthread 7
mainthread 8
mainthread 9
二、後台執行緒/守護執行緒/精靈執行緒
將執行緒設定為後台執行緒:t.setdaemon(true);
啟動執行緒:t.start();
要設定執行緒為後台執行緒必須在啟動執行緒之前。
可使用isdaemon判斷執行緒是否後台執行緒
如果所有的前台執行緒都死亡,後台執行緒也會自動死亡。
主線程預設是前台執行緒,前台執行緒的子執行緒預設是前台執行緒,後台執行緒的子執行緒預設是後台執行緒。
三、執行緒睡眠sleep()
class testthread
}
上述兩條語句都是使主線程睡眠的語句。
四、執行緒讓步yield()
thread.yield(); //讓當前執行緒讓步
五、改變執行緒優先順序
setpriority(int newpriority); 優先順序範圍為整數的1-10
例如
thread.currentthread().setpriority(6);//如果只有乙個主線程在執行,則當前語句則是設定主線程優先順序為6
thread.currentthread().setpriority(max_priority);//如果只有乙個主線程在執行,則當前語句則是設定主線程優先順序為10
t.setpriority(7);//設定執行緒物件t的優先順序為7
可使用getpriority()獲得當前執行緒優先順序,如:
int i=t.getpriority();
《瘋狂Java講義》 控制線程
上面的程式中有三個執行緒,main執行緒 新執行緒 被join的執行緒 main執行緒 和 新執行緒 會併發執行。當主線程的迴圈變數i等於20時,啟動 被join的執行緒 該執行緒不會和 main執行緒 併發執行,main執行緒 需要等待 被join的執行緒 的執行緒執行結束後才可以繼續向下執行。此...
多執行緒02 如何控制線程執行順序
這裡使用join 方法 api中那句 等待該執行緒終止 主語是join方法被呼叫時所處的執行緒,該執行緒 是指呼叫join方法的執行緒。比如現在有a b兩個執行緒物件,在a執行緒 現b.join 那麼a執行緒將會被阻塞 或者說掛起 直到b執行緒執行完畢才會繼續執行b.join 語句下面的 即繼續執行...
JAVA多執行緒之 執行緒池
執行緒池顧名思義,就是乙個放置執行緒的池子。就跟資料庫連線池差不多。執行緒池通過對併發執行緒的控制,能有效的節省系統資源的浪費,提高系統的效能。學習執行緒池,先了解一下執行緒池的乙個基本結構 executor是乙個介面,其中只有乙個方法,就是execute方法。所以executor實際就是乙個執行緒...