關於Java中的程式,進程和線程的詳解...
程式:一段靜態代碼,一組指令的有序集合,它本身沒有任何啟動並執行含義,它只是一個靜態實體,是應用軟體執行的藍本。
進程:是程式的一次動態執行,它對應著從代碼載入,執行至執行完畢的一個完整的過程,是一個動態實體,它有自己的生命
周期。它因建立而產生,因調度而運行,因等待資源或事件而被處於等待狀態,因完成任務而被撤消。反映了一個程式在
一定的資料 集上啟動並執行全部動態過程。通過進程式控制制塊(PCB)唯一的標識某個進程。同時進程佔據著相應的資源(例如包
括cpu的使用 ,輪轉時間以及一些其它裝置的許可權)。是系統進行資源分派和調度的一個獨立單位。
程式和進程之間的主要區別在於:
狀態 是否具有資源 是否有唯一標識 是否具有並發性
進程 動態 有 有 有
程式 靜態 無 無 無
進程的基本狀態:
1、就緒(Ready)狀態
當進程已指派到除CPU以外的所有必要資源後,只要在獲得CPU,便可立即執行,進程這時的狀態就稱為就緒狀態。 在一個系統中處於就緒狀態的進程可能有多個,通常將他們排成一個隊列,稱為就緒隊列。 2、執行狀態
進程已獲得CPU,其程式正在執行。在單處理機系統中,只有一個進程處於執行狀態;再多處理機系統中,則有多個進程處於執行狀態。 3、阻塞狀態
正在執行的進程由於發生某事件而暫時無法繼續執行時,便放棄處理機而處於暫停狀態,亦即程式的執行受到阻塞, 把這種暫停狀態稱為阻塞狀態,有時也稱為等待狀態或封鎖狀態。 三種進程之間的轉換圖: 線程: 可以理解為進程的多條執行線索,每條線索又對應著各自獨立的生命週期。線程是進程的一個實體,是CPU調度和指派的
基本單位,它是比進程更小的能獨立啟動並執行基本單位。一個線程可以建立和撤銷另一個線程,同一個進程中的多個線程之
間可以並發執行。 Java中的線程要經曆四個階段: 1、建立: 建立一個Java線程常見的有兩種方式(實際上,建立線程最重要的是提供線程函數(回呼函數),該函數作為新建立線程的入口函數,實現自己想要的功能。): 繼承Thread類,實現Runnable介面 程式碼片段:
//繼承繼承繼承Threadl類class MyThread extends Thread{ public void run() { System.out.println("My thread is started."); } }MyThread myThread = new MyThread(); myThread.start();//實現Runnable class MyRunnable implements Runnable{ public void run() { System.out.println("My runnable is invoked."); } }Thread myThread = new Thread( new MyRunnable()); myThread.start(); 2、執行: 線程建立後僅僅有了記憶體資源,在JVM管理的線程中還沒有該線程,該線程必須調用start方法 通知JVM, 這樣JVM就會知道又有一個新的線程在排隊等候了,如果當前線程輪到CPU的使用 許可權的話,當前線程就會繼續執行。 3、中斷: a.JVM將CPU的使用許可權從當前線程切換到其它線程,使本線程讓出CPU的使用許可權而處於中斷狀態。
b.線程在執行過程中調用了sleep方法,使當前線程處於休眠狀態。
c.線程在執行的過程中調用wait方法
d.線程在使用cpu資源期間,執行了某個操作而進如阻塞狀態。 4、死亡: 死亡的線程不在具有執行能力。線程死亡的原因有二:
a.線程正常運行結束而引起的死亡,即run方法執行完畢。
b.線程被提前強制終止。