控制线程
2019獨角獸企業重金招聘Python工程師標準>>>
Java的線程支持提供了一些便捷的工具方法,通過這些便捷的工具方法可以很好地控制線程的執行。
- join線程
Thread提供了讓一個線程等待另一個線程完成的方法---join()方法。當在某個程序執行流中調用其他線程的join()方法時,調用線程將被阻塞,直到被join()方法加入的join線程執行完為止。
join()方法通常由使用線程的程序調用,以將大問題劃分成許多小問題,每個小問題分配一個線程。當所有的小問題都得到處理后,再調用主線程來進一步操作。
- 后臺線程
有一種線程是在后臺運行的,它的任務是為其他的線程提供服務,這種線程被稱為“后臺線程(Daemon Thread)”。JVM的垃圾回收線程就是的典型的后臺線程。
后臺線程有個特征:如果所有的前臺線程都死亡,后臺線程會自動死亡。
調用Thread對象的setDaemon(true)方法可將指定線程設置成后臺線程。isDaemon()方法用于判斷指定線程是否為后臺線程。
主線程默認是前臺線程。前臺線程創建的子線程默認是前臺線程,后臺線程創建的子線程默認是后臺線程。
- 線程睡眠Thread.sleep
如果需要讓當前正在執行的線程暫停一段時間,并進入阻塞態,可以通過調用Thread類的靜態方法sleep()來實現。
當前線程調用sleep()方法進入阻塞態后,在其睡眠時間段內,該線程不會獲得執行的機會,即使系統中沒有其他可執行的線程,處于sleep中的線程也不會執行,因此sleep()方法常用來暫停程序的執行。
- 線程讓步Thread.yield
yield()方法也是Thread類提供的一個靜態方法,它也可以讓當前線程暫停,但它不會阻塞該線程,它只是將該線程轉入就緒態。yield()方法只是讓當前線程暫停一下,讓系統的線程調度器重新調度一次。完全可能的情況是:當某個線程調用了yield()方法暫停之后,線程調度器又將其調度出來重新執行。
實際上,當某個線程調用了yield()方法暫停之后,只有優先級與當前線程相同,或者優先級比當前線程更高的處于就緒態的線程才會獲得執行的機會。
通常不建議使用yield()方法來控制并發線程的執行。
- 改變線程優先級
每個線程執行時都具有一定的優先級,優先級高的線程獲得較多的執行機會,而優先級低的線程則獲得較少的執行機會。
每個線程默認的優先級都與創建它的父線程的優先級相同,在默認情況下,main線程具有普通優先級。
Thread類提供了setPriority(int priority)實例方法來設置線程的優先級。
?
轉載于:https://my.oschina.net/u/2914561/blog/800008
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
- 上一篇: 从函数劫持角度看开发调试工具AlloyL
- 下一篇: Java虚拟机的功能