java中程序,進程和線程的區(qū)別

程序,進程和線程的區(qū)別
馬克-to-win:程序,進程和線程的區(qū)別是什么?這個問題比較抽象難理解,但又非常重要。我并不想給出一大堆抽象的學(xué)術(shù)解釋,那樣只能誤國誤民。所以我先給大家舉一個例子。馬克-to-win: 2000年的時候,我比較愛用ie的老版本。當(dāng)時我喜歡邊上網(wǎng)邊下載很多東西,比如很多MP3同時下。我發(fā)覺如果我打開一個ie,之后用 file/new,new出很多窗口來,邊看網(wǎng)頁,邊下載很多mp3的話,如果有一個下載崩潰的話,所有的ie窗口就同時都崩潰了,包括網(wǎng)頁和所有的下載窗口。馬克-to-win:后來我就學(xué)聰明了,我打開兩個ie。一個ie用來瀏覽網(wǎng)頁。另一個ie,file/new出很多新的窗口。這樣如果下載出問題了,下載的ie會崩潰。但瀏覽網(wǎng)頁的ie依舊完好的工作。在上述例子當(dāng)中,ie就是一個應(yīng)用程序,后來我打開兩個ie,就是打開兩個進程。這兩個進程,在內(nèi)存中分別占有不同的代碼空間。馬克-to-win:所以一個進程崩潰不影響另外一個。后來從其中一個ie, file/new出很多個新窗口。每一個窗口就是一個線程,線程在內(nèi)存當(dāng)中是沒有自己的代碼空間的。它只能依附于進程存在。馬克-to-win:所以,這個進程當(dāng)中的一個線程窗口崩潰了,所有依附于這個進程的線程窗口就都崩潰了。相對于進程來講,線程非常輕量,非常節(jié)省資源。我經(jīng)常同時打開二十個窗口,下載各種音樂mp3。反正是線程,不占資源。馬克-to-win:線程在內(nèi)存當(dāng)中沒有自己的代碼空間。只有程序計數(shù)器。一個線程可能執(zhí)行到所依附進程的1000行,另一個線程,可能執(zhí)行到第99行,這兩個線程,雖然依附于同一個主進程,但他們各自執(zhí)行各自的,相互不影響。馬克-to-win:仔細揣摩我上面說的故事,你就會理解,程序,進程和線程的區(qū)別。給點抽象的話:程序是硬盤上的一個文件,是一個機器代碼和它的數(shù)據(jù)的集合。進程是程序在內(nèi)存上的一次運行活動,占代碼空間。線程是依附于進程,靠程序計數(shù)器能獨立運行,輕量獨立運行單元。


馬克- to-win:馬克 java社區(qū):防盜版實名手機尾號: 73203。

線程間(因為使用程序計數(shù)器)的切換成本比進程間切換成本低,所以使系統(tǒng)的空轉(zhuǎn)時間少,提高CPU利用率。
3.線程技術(shù)基礎(chǔ)
主線程
馬克-to-win:根據(jù)java的語法(sun公司當(dāng)初就是這么設(shè)計的):在Java程序啟動時,一個線程立刻運行,該線程通常稱為程序的主線程(main thread) 。 主線程的重要性體現(xiàn)在兩個方面: 它是產(chǎn)生其他子線程的線程。 通常它必須最后完成執(zhí)行,因為它執(zhí)行各種關(guān)閉動作。我們從第一章helloworld開始,其實就已經(jīng)創(chuàng)建了主線程,只不過我們沒有著重提?,F(xiàn)在我們研究一下:







例:1.3.1-本章源碼
public class Test {
    public static void main(String args[]) {
/*Thread.currentThread();把當(dāng)前的線程參數(shù)取回來, 放在t中, 當(dāng)前的線程其實就是主線程,線程參數(shù)包括線程名稱,程序計數(shù)器等*/
        Thread t = Thread.currentThread();
/*打印的結(jié)果是線程名稱,優(yōu)先級, 線程組。
 public String toString()Returns a string representation of this
thread, including the thread's name, priority, and thread group.
*/
        System.out.println("當(dāng)前線程是: " + t);
/*改變了主線程的名字*/
        t.setName("馬克-to-win的線程");
        System.out.println("當(dāng)前線程名是: " + t);
    }
}

輸出結(jié)果:
當(dāng)前線程是: Thread[main,5,main]
當(dāng)前線程名是: Thread[馬克-to-win的線程,5,main]