1. 程式人生 > >java 程序和執行緒的區別與聯絡

java 程序和執行緒的區別與聯絡

程式:一段靜態的程式碼,一組指令的有序集合,它本身沒有任何執行的含義,它只是一個靜態的實體,是應用軟體執行的藍本。

   程序:是程式的一次動態執行,它對應著從程式碼載入,執行至執行完畢的一個完整的過程,是一個動態的實體,它有自己的生命

          週期。它因建立而產生,因排程而執行,因等待資源或事件而被處於等待狀態,因完成任務而被撤消。反映了一個程式在

         一定的資料 集上執行的全部動態過程。通過程序控制塊(PCB)唯一的標識某個程序。同時程序佔據著相應的資源(例如包

         括cpu的使 ,輪轉時間以及一些其它裝置的許可權)。是系統進行資源分配和排程的一個獨立單位。

           程式和程序之間的主要區別在於:

                       狀態         是否具有資源       是否有唯一標識      是否具有併發性

            程序     動態                有                      有                     有

            程式     靜態                無                      無                     無

         程序的基本狀態:

       1、就緒(

Ready)狀態

       當程序已分配到除CPU以外的所有必要資源後,只要在獲得CPU,便可立即執行,程序這時的狀態就稱為就緒狀態。在一個系統中處於就緒狀態的程序可能有多個,通常將他們排成一個佇列,稱為就緒佇列。

       2、執行狀態

       程序已獲得CPU,其程式正在執行。在單處理機系統中,只有一個程序處於執行狀態;再多處理機系統中,則有多個程序處於執行狀態。

       3、阻塞狀態

       正在執行的程序由於發生某事件而暫時無法繼續執行時,便放棄處理機而處於暫停狀態,亦即程式的執行受到阻塞,把這種暫停狀態稱為阻塞狀態,有時也稱為等待狀態或封鎖狀態。

三種程序之間的轉換圖:

    執行緒: 可以理解為程序的多條執行線索,每條線索又對應著各自獨立的生命週期。執行緒是程序的一個實體,是CPU排程和分派的

            基本單位,它是比程序更小的能獨立執行的基本單位。一個執行緒可以建立和撤銷另一個執行緒,同一個程序中的多個執行緒之

            間可以並發執行。

            這裡在詳細講解一下Java中的程序和執行緒的概念。

            Java中的執行緒要經歷4個過程

            1)建立

                  建立一個Java執行緒常見的有兩種方式:

                  繼承Thread類和實現Runnable介面這兩種方式。

            2)執行

                      執行緒建立後僅僅佔有了記憶體資源,在JVM管理的執行緒中還沒有該執行緒,該執行緒必須呼叫start方法通知JVM,這樣JVM

                 就會知道又有一個新的執行緒排隊等候了。如果當前執行緒輪到了CPU的使用許可權的話,當前執行緒就會繼續執行。

           3)中斷

                a.JVM將CPU的使用許可權從當前執行緒切換到其它執行緒,使本執行緒讓出CPU的使用許可權而處於中斷狀態。

                b.執行緒在執行過程中呼叫了sleep方法,使當前執行緒處於休眠狀態。

                c.執行緒在執行的過程中呼叫wait方法

                d.執行緒在使用cpu資源期間,執行了某個操作而進如阻塞狀態。

           4)死亡

               死亡的執行緒不在具有執行能力。執行緒死亡的原因有二:

                a.執行緒正常執行結束而引起的死亡,即run方法執行完畢。

                b.執行緒被提前強制終止。