多線程細節問題
sleep方法和wait方法的異同點?
相同點:
讓線程處於凍結狀態.
不同點:
sleep必須指定時間
wait可以指定時間也可以不指定時間
sleep時間到,線程處於臨時阻塞狀態或者運行態
wait如果沒有時間,必須通過notify或者notifyAll喚醒
sleep不一定非要定義在同步中
wait必須定義在同步中
都定義在同步中時
sleep放執行權,不放鎖
wait放執行權,放鎖
syschronized(obj) { wait();// 0 1 2 code... } syschronized(obj) { notifyAll();// 3 code... }線程如何停止
stop方法
stop方法已經過時,看描述發現,有其他解決方案.
線程結束:就是讓線程任務代碼執行完,run方法結束
run方法如何結束?
通過定義循環
注意:萬一線程在任務中處於凍結狀態他還能判斷標記嗎?
所謂的中斷狀態並不是停止線程.
interrupt中斷狀態使如果目標線程等待很長時間,則應使用interrupt 方法來中斷該等待所謂的中斷並不是停止線程。
interrupt的功能是將線程的凍結狀態清除,讓線程恢復到的運行狀態(讓線程重新具備cpu的執行資格)。
因為時強制性的所以會有異常InterruptedException發生,可以在catch中捕獲異常,
在異常處理中,改變標記讓循環結束,讓run方法結束。
守護線程
守護線程:也可以理解為後台線程,之前創建的都是前台線程。
只要線程調用了setDaemon(true);就可以把線程標記為守護線程。
前台後台線程運行時都是一樣的,獲取CPU的執行權執行。
只有結束的時候有些不同。
前台線程要通過run方法結束,線程結束。
後台線程也可以通過run方法結束,線程結束,還有另一種情況,
當進程中所有的前台線程都結束了,這時無論後台線程處於什麼樣的狀態,都會結束,從而進程會結束。
進程結束依賴的都是前台線程。
線程優先級
線程的優先級:用數字標識的,1-10
其中默認的初始優先級時5 最明顯的三個優先級1,5,10。
setPriority(Thread.MAX_PRIORITY);
線程組
線程組:ThreadGroup:可以通過Thread的構造函數明確新線程對象所屬的線程組。
線程組的好處,可以對多個同組線程,進行統一的操作。
默認都屬於main線程組。
匿名內部類
Runnable rn = new Runnable() { public void run() { }};//上述代碼等價於class Anomymous implements Runnable { public void run() { }}Runnable rn = new Anomymous();感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!