復習多線程二
守護線程
java中有兩種線程:一種是主線程,一種是守護線程。
用戶線程是指:用戶自定義創建的線程,主線程停止,用戶線程不會停止。
守護線程:當進程不存在或主線程停止,守護線程也會停止。
使用setDaemon(true)方法設置為守護線程
public class DaemonThread { public static void main(String[] args) { Thread thread=new Thread(new Runnable(){ @Override public void run() { while(true){ try { Thread.sleep(100); } catch (Exception e) { } System.out.println("我是子線程"); } } }); thread.setDaemon(true); thread.start(); for(int i=0;i<8;i++){ try { Thread.sleep(100); } catch (Exception e) { } System.out.println("我是主線程"); } System.out.println("主線程執行完畢!"); } }
多線程的運行狀態:
線程從創建、運行到結束總是處於下面五個狀態之一:新建狀態、就緒狀態、運行狀態、阻塞狀態、死亡狀態。
新建狀態:
當用new操作符創建一個線程時,例如new Thread(R),線程還沒有開始運行,此時線程處於新建狀態。當一個線程處於新生狀態時,程序還沒有開始運行線程中的代碼
就緒狀態:
一個新創建的線程並不自動開始運行,要執行線程,必須調用線程的start()方法。當線程對象調用start()方法即啟動了線程,start()方法創建線程 運行的系統資源,並調度線程運行run方法。
當start()方法返回後,線程就屬於就緒狀態。
處於就緒狀態的線程並不一定立即運行run()方法,線程還必須同其他線程競爭CPU時間,只有獲取CPU時間才可以運行線程。因為在單核CPU的計算機系統中,不可能同時運行多個線程,一個時刻僅有一個線程處於運行狀態。因此此時可能有多個線程處於就緒狀態。對多個處於就緒狀態的線程是由java運行時系統的線程調度程序(thread scheduler)來調度的。
運行狀態:
當線程獲得CPU時間後,它才進入運行狀態,真正開始執行run方法。
阻塞狀態:
線程運行過程中,可能由各種原因進入阻塞狀態:
1、線程通過調用sleep方法進入睡眠狀態
2、線程調用一個在I/O上被阻塞的操作,即該操作在輸入輸出完成之前不會返回到它的調用者;
3、線程視圖得到一個鎖,而該鎖正被其他線程持有。
4、線程在等待某個觸發條件
死亡狀態:
有兩個原因會導致線程死亡:
1、run()方法正常退出而自然死亡,
2、一個未捕獲的異常終止了run()方法而使線程猝死。
為了確定線程在當前是否存活著(就是要麽是可運行的,要麽是被阻塞了),需要使用
復習多線程二