生命周期的五種狀态
-
建立(new Thread):
當建立Thread類的一個執行個體(對象)時,此線程進入建立狀态(未被啟動),此時系統還沒有為其配置設定資源。
例如:Thread t1=new Thread();
通過Thread類的方法,可以設定線程的優先級(setPrioriry)、線程名(setName)、線程類型(setDaemon)。
-
就緒(runnable):線程已經被啟動,正在等待被配置設定給CPU時間片,也就是說此時線程正在就緒隊列中排隊等候得到CPU資源。例如:t1.start();
如果某線程執行了yield()方法,那麼該線程會被暫時剝奪CPU資源,重新進入就緒狀态。
-
運作(running):線程獲得CPU資源正在執行任務(run()方法),此時除非此線程自動放棄CPU資源或者有優先級更高的線程進入,線程将一直運作到結束。
通過使用Thread類的isAlive方法,可以判斷線程狀态,true代表線程處于就緒或運作狀态,false表示線程處于阻塞或停止狀态
- 死亡(dead):當線程執行完畢或被其它線程殺死,線程就進入死亡狀态,這時線程不可能再進入就緒狀态等待執行。
- 自然終止:正常運作run()方法後終止
- 異常終止:調用stop()方法或interrupt()方法讓一個線程終止運作
-
阻塞(blocked):
由于某種原因導緻正在運作的線程讓出CPU并暫停自己的執行,即進入堵塞狀态。
- 正在睡眠:用sleep(long t) 方法可使線程進入睡眠方式。一個睡眠着的線程在指定的時間過去可進入就緒狀态。
- 當多個線程視圖進入某個同步區域時,沒能進入該同步區域的線程将會被置入鎖定集(Lock Pool),知道獲得該同步區域的鎖。進入就緒。
- 正在等待:調用wait()方法的對象将會進入阻塞狀态。調用motify()方法回到就緒狀态。調用上述方法時要求線程首先擷取到該對象的鎖。
終止線程的三種方法:
- 使用退出标志,使線程正常退出,也就是方run方法完成後線程終止,推薦使用
- 使用stop方法強行終止(不推薦,可能發生不可預料的結果)
- 使用interrupt方法中斷線程