線程的狀態 線程的所有狀態在Thread中的State枚舉中定義 public enum State{ NEW, //剛剛新建的線程,還沒有開始執行 RUNNABLE, //執行時的狀態 BLOCKED, //在執行過程中遇到synchronized同步塊,進入blocked阻塞狀態,暫停執行,直到 ...
線程的狀態
線程的所有狀態在Thread中的State枚舉中定義
public enum State{
NEW, //剛剛新建的線程,還沒有開始執行
RUNNABLE, //執行時的狀態
BLOCKED, //在執行過程中遇到synchronized同步塊,進入blocked阻塞狀態,暫停執行,直到獲得請求的鎖
WAITING, //無時間限制的等待,通過wating()方法等待的線程在等待notify()方法,而通過join()方法等待的線程則會等待目標線程終止
TIMED_WAITING, //有時限的等待
TERMINATED; //線程執行完畢,進入terminated在狀態,表示結束
}
新建線程
新建線程有兩種方式
1.繼承Thread類
class ThreadDemo extends Thread{
//重寫run()方法
public void run(){};
}
Thread t1 = new ThreadDemo();
t1.start();//啟動線程
2.實現Runnable介面
class ThreadDemo implements Runnable{
//重寫run()方法
public void run(){};
}
Thread t1 = new Thread(new ThreadDemo());//通過Thread的構造函數 新建線程
t1.start();//啟動線程
run()和start()的區別:run()方法中需要寫的是線程將要執行的邏輯,就是我要做什麼;start()方法表示啟動線程,就是我要開始了。
終止線程
stop()方法(已被廢棄),該方法的執行會終止線程並釋放鎖,而鎖是用來維持對象一致性的,如果寫線程剛寫一半的時候執行了stop(),釋放了鎖,讀線程讀到的數據就有問題了
線程中斷
不同於stop()方法,Thread.interrupt()方法不會立即終止線程,而是設置一個中斷標誌 告訴線程‘有人希望你退出了’,中斷相關方法有
public void Thread.interrupt(); //實例方法,中斷線程
public boolean Thread.isInterrupted(); //實例方法,判斷是否被中斷
public static boolean Thread.interrupted() //靜態方法,判斷是否被中斷,並清除當前中斷狀態
Thread.sleep()方法會讓當前線程休眠,它會拋出一個InterruptedException中斷異常,非運行時異常,必須捕獲;
Thread.sleep()方法由於中斷而拋出異常時,會清除中斷標記