Java多執行緒學習(2)執行緒控制

快樂的博格巴發表於2018-10-14

1 join執行緒

Thread提供了讓一個執行緒等待另一個執行緒完成的方法——join()方法。當在某個程式執行流中呼叫其他執行緒的join()方法時,呼叫執行緒將被阻塞,直到被join()方法加入的join執行緒執行完為止。
join()方法有三種過載形式:
join()
join(long millis) 最長多少毫秒, join(long millis, int nanos),最長多少毫秒加微秒.

2 後臺執行緒

後臺執行緒,又稱為“守護執行緒”,JVM垃圾回收執行緒就是典型的後臺執行緒。
後臺執行緒有個特徵:所有前臺執行緒都死亡,後臺執行緒會自動死亡。

呼叫Thread物件的setDaemon(true)方法可以將指定的執行緒設定為後臺執行緒。

Thread類還提供了一個isDaemon()方法,用於判斷指定的執行緒是不是後臺執行緒。

3 執行緒睡眠:sleep

如果需要讓當前的執行緒暫停一段時間,進入阻塞狀態,可以呼叫Thread類的靜態sleep()方法。sleep(long millis)。即使程式中沒有其他可執行的執行緒,處於sleep的執行緒也不會執行,因此sleep()方法常用來暫停程式的執行。

4 執行緒讓步

yield()與sleep()方法有點相似,也是Thread類的一個靜態方法。它可以讓當前正在執行的執行緒暫停,但是它不會阻塞該執行緒,它只是將該執行緒轉入就緒狀態。讓當前程式暫停一下,讓系統執行緒排程器重新排程一次。完全可能的是,當某個方法呼叫yield之後,執行緒排程器又將其排程出來重新執行。

5 改變執行緒優先順序

每一個執行緒都有一定的優先順序,優先順序高的執行緒獲得較多的執行機會,優先順序低的執行緒則獲得較少的執行機會。
每一個執行緒預設的優先順序都與建立它的父執行緒的優先順序相同。在預設情況下,main執行緒具有普通優先順序,由main執行緒建立的子執行緒也具有普通優先順序。

Thread類提供了setPriority(int newPriority), getPriority()方法來設定和返回指定的執行緒優先順序,其中setPriority方法的引數可以是一個整數,0——10之間。也可以用Thread類的如下三個靜態常量:
MAX_PRIOPITY:10
MIN_PRIORITY:1
NORM_PRIORITY:5
勁量使用靜態常量來設定優先順序。

相關文章