6.1 線程簡(jiǎn)介
隨著計(jì)算機(jī)的飛速發(fā)展,個(gè)人計(jì)算機(jī)上的操作系統(tǒng)也紛紛采用多任務(wù)和分時(shí)設(shè)計(jì),將早期只有大型計(jì)算機(jī)才具有的系統(tǒng)特性帶到了個(gè)人計(jì)算機(jī)系統(tǒng)中。一般可以在同一時(shí)間內(nèi)執(zhí)行多個(gè)程序的操作系統(tǒng)都有進(jìn)程的概念。一個(gè)進(jìn)程就是一個(gè)執(zhí)行中的程序,而每一個(gè)進(jìn)程都有自己獨(dú)立的一塊內(nèi)存空間、一組系統(tǒng)資源。在進(jìn)程概念中,每一個(gè)進(jìn)程的內(nèi)部數(shù)據(jù)和狀態(tài)都是完全獨(dú)立的。Java程序通過(guò)流控制來(lái)執(zhí)行程序流,程序中單個(gè)順序的流控制稱為線程,多線程則指的是在單個(gè)程序中可以同時(shí)運(yùn)行多個(gè)不同的線程,執(zhí)行不同的任務(wù)。多線程意味著一個(gè)程序的多行語(yǔ)句可以看上去幾乎在同一時(shí)間內(nèi)同時(shí)運(yùn)行。
線程與進(jìn)程相似,是一段完成某個(gè)特定功能的代碼,是程序中單個(gè)順序的流控制;但與進(jìn)程不同的是,同類的多個(gè)線程是共享一塊內(nèi)存空間和一組系統(tǒng)資源,而線程本身的數(shù)據(jù)通常只有微處理器的寄存器數(shù)據(jù),以及一個(gè)供程序執(zhí)行時(shí)使用的堆棧。所以系統(tǒng)在產(chǎn)生一個(gè)線程,或者在各個(gè)線程之間切換時(shí),負(fù)擔(dān)要比進(jìn)程小的多,正因如此,線程被稱為輕負(fù)荷進(jìn)程(light-weight process)。一個(gè)進(jìn)程中可以包含多個(gè)線程。
一個(gè)線程是一個(gè)程序內(nèi)部的順序控制流。
1. 進(jìn)程:每個(gè)進(jìn)程都有獨(dú)立的代碼和數(shù)據(jù)空間(進(jìn)程上下文) ,進(jìn)程切換的開銷大。
2. 線程:輕量的進(jìn)程,同一類線程共享代碼和數(shù)據(jù)空間,每個(gè)線程有獨(dú)立的運(yùn)行棧和程序計(jì)數(shù)器(PC),線程切換的開銷小。
3. 多進(jìn)程:在操作系統(tǒng)中,能同時(shí)運(yùn)行多個(gè)任務(wù)程序。
4. 多線程:在同一應(yīng)用程序中,有多個(gè)順序流同時(shí)執(zhí)行。
6.1.1 線程的概念模型
Java內(nèi)在支持多線程,它的所有類都是在多線程下定義的,Java利用多線程使整個(gè)系統(tǒng)成為異步系統(tǒng)。Java中的線程由三部分組成,如圖6.1所示。
1. 虛擬的CPU,封裝在java.lang.Thread類中。
2. CPU所執(zhí)行的代碼,傳遞給Thread類。
3. CPU所處理的數(shù)據(jù),傳遞給Thread類。
隨著計(jì)算機(jī)的飛速發(fā)展,個(gè)人計(jì)算機(jī)上的操作系統(tǒng)也紛紛采用多任務(wù)和分時(shí)設(shè)計(jì),將早期只有大型計(jì)算機(jī)才具有的系統(tǒng)特性帶到了個(gè)人計(jì)算機(jī)系統(tǒng)中。一般可以在同一時(shí)間內(nèi)執(zhí)行多個(gè)程序的操作系統(tǒng)都有進(jìn)程的概念。一個(gè)進(jìn)程就是一個(gè)執(zhí)行中的程序,而每一個(gè)進(jìn)程都有自己獨(dú)立的一塊內(nèi)存空間、一組系統(tǒng)資源。在進(jìn)程概念中,每一個(gè)進(jìn)程的內(nèi)部數(shù)據(jù)和狀態(tài)都是完全獨(dú)立的。Java程序通過(guò)流控制來(lái)執(zhí)行程序流,程序中單個(gè)順序的流控制稱為線程,多線程則指的是在單個(gè)程序中可以同時(shí)運(yùn)行多個(gè)不同的線程,執(zhí)行不同的任務(wù)。多線程意味著一個(gè)程序的多行語(yǔ)句可以看上去幾乎在同一時(shí)間內(nèi)同時(shí)運(yùn)行。
線程與進(jìn)程相似,是一段完成某個(gè)特定功能的代碼,是程序中單個(gè)順序的流控制;但與進(jìn)程不同的是,同類的多個(gè)線程是共享一塊內(nèi)存空間和一組系統(tǒng)資源,而線程本身的數(shù)據(jù)通常只有微處理器的寄存器數(shù)據(jù),以及一個(gè)供程序執(zhí)行時(shí)使用的堆棧。所以系統(tǒng)在產(chǎn)生一個(gè)線程,或者在各個(gè)線程之間切換時(shí),負(fù)擔(dān)要比進(jìn)程小的多,正因如此,線程被稱為輕負(fù)荷進(jìn)程(light-weight process)。一個(gè)進(jìn)程中可以包含多個(gè)線程。
一個(gè)線程是一個(gè)程序內(nèi)部的順序控制流。
1. 進(jìn)程:每個(gè)進(jìn)程都有獨(dú)立的代碼和數(shù)據(jù)空間(進(jìn)程上下文) ,進(jìn)程切換的開銷大。
2. 線程:輕量的進(jìn)程,同一類線程共享代碼和數(shù)據(jù)空間,每個(gè)線程有獨(dú)立的運(yùn)行棧和程序計(jì)數(shù)器(PC),線程切換的開銷小。
3. 多進(jìn)程:在操作系統(tǒng)中,能同時(shí)運(yùn)行多個(gè)任務(wù)程序。
4. 多線程:在同一應(yīng)用程序中,有多個(gè)順序流同時(shí)執(zhí)行。
6.1.1 線程的概念模型
Java內(nèi)在支持多線程,它的所有類都是在多線程下定義的,Java利用多線程使整個(gè)系統(tǒng)成為異步系統(tǒng)。Java中的線程由三部分組成,如圖6.1所示。
1. 虛擬的CPU,封裝在java.lang.Thread類中。
2. CPU所執(zhí)行的代碼,傳遞給Thread類。
3. CPU所處理的數(shù)據(jù),傳遞給Thread類。