程序:一段靜態(tài)的代碼,,一組指令的有序集合,它本身沒有任何運(yùn)行的含義,,它只是一個(gè)靜態(tài)的實(shí)體,,是應(yīng)用軟件執(zhí)行的藍(lán)本。 進(jìn)程:是程序的一次動態(tài)執(zhí)行,,它對應(yīng)著從代碼加載,,執(zhí)行至執(zhí)行完畢的一個(gè)完整的過程,是一個(gè)動態(tài)的實(shí)體,,它有自己的生命周期,。它因創(chuàng)建而產(chǎn)生,因調(diào)度而運(yùn)行,,因等待資源或事件而被處于等待狀態(tài),,因完成任務(wù)而被撤消。反映了一個(gè)程序在一定的數(shù)據(jù) 集上運(yùn)行的全部動態(tài)過程,。通過進(jìn)程控制塊(PCB)唯一的標(biāo)識某個(gè)進(jìn)程,。同時(shí)進(jìn)程占據(jù)著相應(yīng)的資源(例如包括cpu的使用 ,輪轉(zhuǎn)時(shí)間以及一些其它設(shè)備的權(quán)限),。是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位,。 程序和進(jìn)程之間的主要區(qū)別在于:狀態(tài) 是否具有資源 是否有唯一標(biāo)識 是否具有并發(fā)性 進(jìn)程 動態(tài) 有 有 有 程序 靜態(tài) 無 無 無 進(jìn)程的基本狀態(tài): 1、就緒(Ready)狀態(tài) 當(dāng)進(jìn)程已分配到除CPU以外的所有必要資源后,,只要在獲得CPU,,便可立即執(zhí)行,進(jìn)程這時(shí)的狀態(tài)就稱為就緒狀態(tài),。在一個(gè)系統(tǒng)中處于就緒狀態(tài)的進(jìn)程可能有多個(gè),,通常將他們排成一個(gè)隊(duì)列,稱為就緒隊(duì)列,。 2,、執(zhí)行狀態(tài) 進(jìn)程已獲得CPU,其程序正在執(zhí)行,。在單處理機(jī)系統(tǒng)中,,只有一個(gè)進(jìn)程處于執(zhí)行狀態(tài);再多處理機(jī)系統(tǒng)中,,則有多個(gè)進(jìn)程處于執(zhí)行狀態(tài),。 3、阻塞狀態(tài) 正在執(zhí)行的進(jìn)程由于發(fā)生某事件而暫時(shí)無法繼續(xù)執(zhí)行時(shí),,便放棄處理機(jī)而處于暫停狀態(tài),,亦即程序的執(zhí)行受到阻塞,,把這種暫停狀態(tài)稱為阻塞狀態(tài),有時(shí)也稱為等待狀態(tài)或封鎖狀態(tài),。 三種進(jìn)程之間的轉(zhuǎn)換圖:
線程: 可以理解為進(jìn)程的多條執(zhí)行線索,,每條線索又對應(yīng)著各自獨(dú)立的生命周期。線程是進(jìn)程的一個(gè)實(shí)體,是CPU調(diào)度和分派的基本單位,它是比進(jìn)程更小的能獨(dú)立運(yùn)行的基本單位,。一個(gè)線程可以創(chuàng)建和撤銷另一個(gè)線程,,同一個(gè)進(jìn)程中的多個(gè)線程之間可以并發(fā)執(zhí)行。 這里在詳細(xì)講解一下Java中的進(jìn)程和線程的概念,。 Java中的線程要經(jīng)歷4個(gè)過程 1)創(chuàng)建 創(chuàng)建一個(gè)Java線程常見的有兩種方式: 繼承Thread類和實(shí)現(xiàn)Runnable接口這兩種方式,。 2)執(zhí)行 線程創(chuàng)建后僅僅占有了內(nèi)存資源,在JVM管理的線程中還沒有該線程,,該線程必須調(diào)用start方法通知JVM,,這樣JVM 就會知道又有一個(gè)新的線程排隊(duì)等候了。如果當(dāng)前線程輪到了CPU的使用權(quán)限的話,,當(dāng)前線程就會繼續(xù)執(zhí)行,。 3)中斷 a.JVM將CPU的使用權(quán)限從當(dāng)前線程切換到其它線程,使本線程讓出CPU的使用權(quán)限而處于中斷狀態(tài),。 b.線程在執(zhí)行過程中調(diào)用了sleep方法,,使當(dāng)前線程處于休眠狀態(tài)。 c.線程在執(zhí)行的過程中調(diào)用wait方法 d.線程在使用cpu資源期間,,執(zhí)行了某個(gè)操作而進(jìn)如阻塞狀態(tài),。 4)死亡 死亡的線程不在具有執(zhí)行能力。線程死亡的原因有二: a.線程正常運(yùn)行結(jié)束而引起的死亡,,即run方法執(zhí)行完畢,。 b.線程被提前強(qiáng)制終止。
|
|