進程(process)是操作系統啓動的一個程序,是操作系統資源分配的最小單元,一個進程可以包含多個線程
線程(thread)是的CPU調度的最小單元
線程的狀態(6種):
- new:創造實例初始化,但未進行start()方法的調用,所以此時的線程還沒到就緒態
- runnable:就緒和運行態統稱爲“運行”
- waiting:需要等待其他線程做出一些特定的動作(通知或者中斷)
- timed—waiting:超時等待,可以設置超時時間,即在超過指定的時間後自行返回
- blocked: 因爲線程還未獲取到鎖而處於阻塞狀態
- terminated:終止,此時線程已經執行完畢
初始化:
通過繼承Thread或者實現Runnable接口可以獲取到一個線程類,然後通過new構建一個線程實例
構建完成後並不是立即運行,通過調用start()方法進入就緒態,等待線程調度程序挑選
系統調度:線程調度程序會根據線程執行所需時間進行系統調度,避免一個只要執行一分鐘的線程排在兩小時線程之後從而導致該線程等待時間過長的情況發生,yield方法可以理解爲給其他線程讓步,從而提高系統運行效率
等待:
使用wait()和join()來可以使線程按照研發人員想要的順序進行執行
通過notify()或者notifyAll()來使得相應的線程從等待狀態回到就緒態
超時等待:
在等待的基礎上設置超時時間,這樣該線程不會一直等待下去,一旦時間達到超時時間則會自動返回。
阻塞:
一般存在於線程進入同步代碼塊或者同步方法之前,進入之前需要排隊從而阻塞,一旦進入代碼塊後則意味着線程獲取到了鎖,回到了就緒態等待運行。
終止:
該線程完成了相應的任務,運行完畢後資源被回收