JAVA線程1 線程基礎及線程狀態

線程與進程?

線程是指程序在執行過程中,能夠執行程序代碼的一個執行單元。

線程的狀態4種:運行、就緒、掛起、結束。

進程是指一段正在執行的程序。

一個進程可以擁有多個線程,各個線程之間共享程序的內存空間(代碼段、數據段、堆空間)、進程級資源(比如文件),但是各個線程擁有自己的棧空間。

 

使用多線程的好處?

使用多線程可以減少程序的響應時間。

與進程相比,線程的創建和切換開銷更小。

多CPU或多核計算機本身就具有執行多線程的能力。

使用多線程能簡化程序的結構,使程序便於理解和維護。一個複雜的進程可以分爲多個線程來執行。

 

線程的狀態?

1.新建(New):創建後尚未啓動的線程的狀態

2.運行(Runnable):包含Running和Ready

3.無限期等待(Waiting):不會被分配CPU執行時間,需要顯式被喚醒

   沒有設置Timeout參數的Object.wait()方法。

   沒有設置Timeout參數的Thread.join()方法。

   LockSupport.park()方法。

4.限期等待(Timed Waiting):在一定時間後會由系統自動喚醒

   Thread.sleep()方法。

   設置了Timeout參數的Object.wait()方法。

   設置了Timeout參數的Thread.join()方法。

   LockSupport.parkNanos()方法。

   LockSupport.parkUnitil()方法。

5.阻塞(Blocked):等待獲取排它鎖

6.結束(Terminated):已終止線程的狀態,線程已經結束執行

注意:

在線程run方法執行完後,線程已經處於結束狀態,線程不可以再被喚醒

如果這個時候又調用線程的start方法,將會報錯

 

線程狀態之間的轉換

1.新建->可運行:執行t.start()

2.可運行->運行:線程被os選中

3.運行->死亡: run()、main()方法結束;異常退出

4.運行->阻塞:等待用戶輸入、Thread.sleep()

5.阻塞->可運行:用戶輸入完成、Thread.sleep()時間結束

6.運行->等待隊列:o.wait() 

7.等待隊列->鎖池:synchronized(o);被其他線程喚醒:o.notify()或o.notifyAll()

8.鎖池->可運行:獲得鎖標識

9.運行->可運行:CPU時間片用完;Thread.yield()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章