【線程】基礎知識-執行緒生命週期
一個執行緒的生命週期,可以分作數個狀態,如下圖所示: 當你實例化一個Thread物件後,必須使用start()方法啟用它,start()方法只能執行一次,重複執行start()方法,會丟出IllegalThreadStateException。執行 start() 之後,執行緒並非馬上執行,而是進入 可執行(Runnable)狀態 ,必須由排班器將執行緒排入CPU 執行(Running) 。 執行緒有其優先權,由 1(Thread.MIN_PRIORITY)到10(Thread.MAX_PRIORITY) , 預設是 Thread.NORM_PRIORITY(5) ,您可以使用Thread的 setPriority() 方法來設定執行緒的優先權,設定必須在1到10之間,否則會丟出 IllegalArgumentException 。優先權高的執行緒會先被執行完畢,然後才會輪到優先權低的執行緒,如果優先權相同,則 輸流執行(Round-robin方式) 。 決大多數的作業系統都支援 timeslicing ,簡單的說就是作業 系統會為每個執行緒分配一小段CPU時間(quantum),時間一到就換下一個執行緒,即使現有的執行緒還沒結束。對於不支援timeslicing的 作業系統,每一個執行緒必須完成後,才能輪到下一個執行緒,在這樣的作業系統中,如果想要讓目前執行緒禮讓一下其它執行緒,讓它們有機會取得執行權, 可以在呼叫緒行緒的 yield() 方法,例如: Thread thread = new Thread(new Runnable() { public void run() { // .... while(true) { ...