線程與進程區別---線程與多線程---多線程的注意點---線程的狀態與生命週期---線程的狀態與生命週期

進程: 是一個程序在其自身的地址空間中的一次執行活動,是程序獨立運行的基本單位。
線程: 是進程的一部分,程序執行中的一個執行路徑(子任務),一個進程可以多個線程,如:Eclipse在輸入代碼時可以校驗。
區別與聯繫:
   一個進程可以包含多個線程,一個線程對應進程中的一條執行路線 。

即:進程包含線程、線程構成進程


線程是程序執行中的一個執行路徑(子任務)。
多線程是指程序中包含多條執行路徑。
大多數程序只有一條執行路線,但現實世界中的很多過程都是同時發生的,對應這種情況,可編寫有多條執行路徑的程序,使得程序能夠同時執行多個任務(並行)。 

多線程機制使得程序的多個子任務能夠“同時”執行


(1)多線程需要操作系統的支持,不是所有類型的計算機都支持多線程應用。
(2)在應用程序中使用多線程不會增加 CPU 的數據處理能力,但可以增加CPU的利用率,改善程序的效率。 
(3)單CPU(單核)系統上運行多線程程序,並不能真正做到多個線程的同時運行。
(4)單CPU(多核)或多CPU系統上運行多線程程序,可以做到多個線程的同時運行,可以大大增強多線程程序的效率。


Java線程的生命週期中一共有五個狀態:

①新建狀態              

②就緒狀態           

③運行狀態

④阻塞狀態              

⑤終止狀態

下圖是五個狀態的狀態轉換示意圖:



(1)新建狀態
  即創建一個新的線程對象(new Thread)。當一個線程處於創建狀態時,系統不爲它分配資源。 
     Thread myThread = new Thread( );
(2)就緒狀態
  Java通過start方法啓動處於新建狀態的線程對象,使其進入就緒狀態。處於就緒狀態的線程已經具備了運行條件,將進入線程隊列等待系統爲其分配CPU,一旦獲得了CPU,線程就進入運行狀態,並調用自己的run方法。 

     myThread.start();

(3)運行狀態
       處於就緒狀態的線程被調度並獲得CPU資源後即進運行狀態,每一個Thread類及其子類的對象都有一個run()方法,當線程對象被調度執行的時候,它將自動調用本對象的run()方法。 

      注意:線程的操作應該寫到run()方法中。

(4)阻塞狀態

        一個正在執行的線程如果在某些特殊情況下,如被人爲掛起或它的CPU時間片耗盡時,將讓出CPU並暫時中止自己的執行,進入阻塞狀態。

       阻塞時它不能進入排列隊列,只有當引起阻塞的原因被消除時,線程纔可以轉入就緒狀態,重新進到線程隊列中排隊等待CPU資源,以便從原來終止處開始繼續執行。 
(5)終止狀態

      終止狀態是線程生命週期的最後一個階段。線程完成全部工作後會正常結束運行,或線程被強制性的終止。 


發佈了111 篇原創文章 · 獲贊 41 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章