java中的線程優先級的范圍是1~10.默認的優先級是5。”高優先級線程”會優先于“低優先級線程”執行。 線程的優先級將該線程的重要性傳遞給了調度器。盡管CPU處理現有線程集的順序是不確定的,但是調度器傾向于讓優先權最高的線程先執行。然而,這并不是意味著優先權較低的線程得不到執行(即優先權并不會導致死鎖),優先級低的線程僅僅是執行的頻率較低。 Java中有兩種線程:用戶線程和守護線程。 可以通過isDaemon()方法來區別它們:如果返回false。則說明該線程是“用戶線程;否則就是“守護線程”。 用戶線程一般用于執行用戶級任務,而守護線程,即后臺線程,一般用來執行后臺任務。并且這種線程并不屬于程序中不可或缺的部分,當所有非后臺線程(用戶線程)結束時,程序也就終止了,同時會殺死進程中的所有的后臺線程;也就是說,只要有非后臺線程還在運行,程序就不會終止。
其中兩次運行結果如下:
main(5)t2(10),loop0t2(10),loop1t2(10),loop2t1(1),loop0t2(10),loop3t1(1),loop1t2(10),loop4t1(1),loop2t1(1),loop3t1(1),loop4main(5)t2(10),loop0t2(10),loop1t2(10),loop2t2(10),loop3t2(10),loop4t1(1),loop0t1(1),loop1t1(1),loop2t1(1),loop3t1(1),loop4通過對比可以得到,高優先級只是體現出執行的頻率會更高,也不是一直占用。
運行結果如下:
main(isDaemon=false)t2(isDaemon=true), loop 0t2(isDaemon=true), loop 1t2(isDaemon=true), loop 2t1(isDaemon=false),loop0t2(isDaemon=true), loop 3t2(isDaemon=true), loop 4t1(isDaemon=false),loop1t2(isDaemon=true), loop 5t2(isDaemon=true), loop 6t2(isDaemon=true), loop 7t2(isDaemon=true), loop 8t1(isDaemon=false),loop2t2(isDaemon=true), loop 9t2(isDaemon=true), loop 10t2(isDaemon=true), loop 11t1(isDaemon=false),loop3t2(isDaemon=true), loop 12t2(isDaemon=true), loop 13t1(isDaemon=false),loop4t2(isDaemon=true), loop 14將線程t2設置為守護線程,而主線程和線程t1為用戶線程,當用戶線程執行完畢后,只有線程t2這個守護線程時,JVM會自動退出。
文章只是作為自己的學習筆記,借鑒了網上的許多案例,如果覺得闊以的話,希望多交流,在此謝過…
新聞熱點
疑難解答