控制線程

Java的線程支持提供了一些便捷的工具方法,經過這些便捷的工具方法能夠很好地控制線程的執行。併發

  • join線程

Thread提供了讓一個線程等待另外一個線程完成的方法---join()方法。當在某個程序執行流中調用其餘線程的join()方法時,調用線程將被阻塞,直到被join()方法加入的join線程執行完爲止。工具

join()方法一般由使用線程的程序調用,以將大問題劃分紅許多小問題,每一個小問題分配一個線程。當全部的小問題都獲得處理後,再調用主線程來進一步操做。spa

  • 後臺線程

有一種線程是在後臺運行的,它的任務是爲其餘的線程提供服務,這種線程被稱爲「後臺線程(Daemon Thread)」。JVM的垃圾回收線程就是的典型的後臺線程。線程

後臺線程有個特徵:若是全部的前臺線程都死亡,後臺線程會自動死亡。對象

調用Thread對象的setDaemon(true)方法可將指定線程設置成後臺線程。isDaemon()方法用於判斷指定線程是否爲後臺線程。it

主線程默認是前臺線程。前臺線程建立的子線程默認是前臺線程,後臺線程建立的子線程默認是後臺線程。io

  • 線程睡眠Thread.sleep

若是須要讓當前正在執行的線程暫停一段時間,並進入阻塞態,能夠經過調用Thread類的靜態方法sleep()來實現。後臺

當前線程調用sleep()方法進入阻塞態後,在其睡眠時間段內,該線程不會得到執行的機會,即便系統中沒有其餘可執行的線程,處於sleep中的線程也不會執行,所以sleep()方法經常使用來暫停程序的執行。垃圾回收

  • 線程讓步Thread.yield

yield()方法也是Thread類提供的一個靜態方法,它也可讓當前線程暫停,但它不會阻塞該線程,它只是將該線程轉入就緒態。yield()方法只是讓當前線程暫停一下,讓系統的線程調度器從新調度一次。徹底可能的狀況是:當某個線程調用了yield()方法暫停以後,線程調度器又將其調度出來從新執行。yield

實際上,當某個線程調用了yield()方法暫停以後,只有優先級與當前線程相同,或者優先級比當前線程更高的處於就緒態的線程纔會得到執行的機會。

一般不建議使用yield()方法來控制併發線程的執行。

  • 改變線程優先級

每一個線程執行時都具備必定的優先級,優先級高的線程得到較多的執行機會,而優先級低的線程則得到較少的執行機會。

每一個線程默認的優先級都與建立它的父線程的優先級相同,在默認狀況下,main線程具備普通優先級。

Thread類提供了setPriority(int priority)實例方法來設置線程的優先級。

相關文章
相關標籤/搜索