生活随笔
收集整理的這篇文章主要介紹了
线程的控制
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- join線程
- 線程睡眠(sleep)
- 線程讓步(yield)
join線程
在線程A中,如果線程B對象調用了 join() 方法,則線程A會阻塞,直到線程B執行完后才能繼續執行。線程B就是join線程。另一個比較好理解的解釋:join是加入的意思,當線程B在線程A中調用了join方法,說明B線程要加入A線程,所以線程A會阻塞到線程B執行完后才能繼續執行。相關方法
- join() :線程A等到線程B執行完
- join(long millis):線程A等待了millis毫秒后就不再等待了
線程睡眠(sleep)
sleep方法是Thread類的方法在某個線程內調用了Thread.sleep(2000);,則表示該線程會阻塞2秒鐘后會轉為就緒狀態等待調度執行。
線程讓步(yield)
當某個線程內調用了Thread.yield();當前線程將立即轉入就緒狀態,然后系統的線程調度器重新調度一次。需要注意的是,只有優先級與當前線程相同或更高的處于就緒狀態的線程才會有獲得執行的機會。重新調度時,很有可能會再次調度到當前線程。示例
#sleep和yield區別
sleep方法暫停該線程后,會給其他線程的執行機會,但是不會理會其他線程的優化級。而yield只有相同或更高的才有執行機會。sleep方法在阻塞時間過了后才將線程轉為就緒狀態。而yield是將線程直接轉為就緒狀態。sleep方法比yield有更好的移植性,通常不建議使用yield方法控制并發線程的執行。
#設置線程優先級
在調用start方法之前設置:
TestThread t = new TestThread();
// 設置優先級
t.setPriority(Thread.MAX_PRIORITY);
t.start();
設置優化級最好只用MAX_PRIORITY=10、MIN_PRIORITY=1、NORM_PRIORITY=5這三個值,因為優化級與電腦系統相關。其他優化級不能完全與Java對應。
#守護線程(后臺線程、精靈線程)
線程在啟動之前設置了daemon屬性為true的線程就是守護線程。
DaemonThread t = new DaemonThread();
// 一定要先設置daemon屬性再啟動??赏ㄟ^t.isDaemon屬性判斷是否是后臺線程
t.setDaemon(true);
t.start();
守護線程特點:
1) 所有前臺線程都死亡,則JVM會通知后臺線程會自動死亡。
2)前臺線程創建的子線程默認是前臺線程,后臺線程創建的子線程默認是后臺線程守護線程的應用:JVM的垃圾回收線程
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔為你收集整理的线程的控制的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。