Java的線程機制
發(fā)布時間:2008/5/27 0:00:00 訪問次數(shù):471
java的線程機制
摘 要: 多線程機制是java的重要技術(shù),闡述了線程和進程的差別;java中線程4個狀態(tài)之間的轉(zhuǎn)換;并結(jié)合例子說明了兩種創(chuàng)建線程的方法。
關(guān)鍵詞: 線程 消亡 阻塞 調(diào)度
線程是指程序中能順序執(zhí)行的一個序列。一個線程只有一個入口點 但可能有幾個出口點 不過,每個時刻的執(zhí)行點總是只有一個。線程是不能獨立運行的程序,而只是某個整體程序內(nèi)部的一個順序執(zhí)行流。
多線程是java的一個重要特點。如果一個程序是單線程的,那么,任何時刻都只有一個執(zhí)行點。這種單線程執(zhí)行方法使系統(tǒng)運行效率低,而且,由于必須依靠中斷來處理輸入/輸出。所以,當出現(xiàn)頻繁輸入/輸出或者有優(yōu)先級較低的中斷請求時,實時性就變得很差。多線程系統(tǒng)可以避免這個缺點。所謂多線程,就是通過系統(tǒng)的調(diào)度使幾個具有不同功能的程序流即線程同時并行地運行。
在單處理器計算機系統(tǒng)中,實際上是不可能使多個線程真正并行運行的,而要通過系統(tǒng)用極短的時間、極快的速度對多個線程進行切換,宏觀上形成多個線程并發(fā)執(zhí)行的效果。
1 線程和進程機制上的差別
線程和進程很相象,它們都是程序的一個順序執(zhí)行序列,但兩者又有區(qū)別。進程是一個實體,每個進程有自己獨立的狀態(tài),并有自己的專用數(shù)據(jù)段,創(chuàng)建進程時, 必須建立和復(fù)制其專用數(shù)據(jù)段,線程則互相共享數(shù)據(jù)段。同一個程序中的所有線程只有一個數(shù)據(jù)段, 所以, 創(chuàng)建線程時不必重新建立和復(fù)制數(shù)據(jù)段。由于數(shù)據(jù)段建立和復(fù)制這方面的差異,使線程的建立和線程間的切換速度大大優(yōu)于進程,另一方面,線程又具備進程的大多數(shù)優(yōu)點。
假設(shè)銀行系統(tǒng)辦理存款和取款手續(xù),將帳本看成數(shù)據(jù)段。如果按進程這種機制,那么,當儲戶去存/取款時,銀行應(yīng)先把帳本復(fù)制一遍,為儲戶建立一個獨立的帳本再結(jié)算。如果按線程機制, 那么,銀行里所有的出納員都用同一個帳本,儲戶來辦存/取款時,也從這個帳本直接結(jié)算。用線程機制省去了數(shù)據(jù)段復(fù)制這一步顯然是線程獨具的特點。
由于多個線程共享一個數(shù)據(jù)段,所以,也出現(xiàn)了數(shù)據(jù)訪問過程的互斥和同步問題,這使系統(tǒng)管理功能變得相對復(fù)雜。
總的來說,一個多線程系統(tǒng)在提高系統(tǒng)的輸入/輸出速度、有效利用系統(tǒng)資源、改善計算機通信功能以及發(fā)揮多處理器硬件功能方面顯示了很大優(yōu)勢。因此,一些最新的操作系統(tǒng)如windows95、windows98、windows nt等都提供了對多線程的支持。但是,在多線程操作系統(tǒng)下設(shè)計多線程的程序仍然是一個比較復(fù)雜和困難的工作。由于需要解決對數(shù)據(jù)段的共享,所以,原則上應(yīng)該從程序設(shè)計角度采用加鎖和釋放措施,稍有不慎,便會使系統(tǒng)產(chǎn)生管理上的混亂。 而java從語言一級提供對多線程的支持,這樣,可由語言和運行系統(tǒng)聯(lián)合提供對共享數(shù)據(jù)段的管理功能和同步機制,使得多線程并行程序設(shè)計相對比較容易。
2 java線程的生命周期
每個線程都是和生命周期相聯(lián)系的,一個生命周期含有多個狀態(tài),這些狀態(tài)間可以互相轉(zhuǎn)化。
java的線程的生命周期可以分為4個狀態(tài);創(chuàng)建(new)狀態(tài);可運行(runnable)狀態(tài);不執(zhí)行(notrunnable)狀態(tài);消亡(dead)狀態(tài)。
創(chuàng)建狀態(tài)是指創(chuàng)建一個線程對應(yīng)的對象的過程,java系統(tǒng)中,些對象都是從java.lang包內(nèi)一個稱為thread的類用關(guān)鍵字new創(chuàng)建的。剛創(chuàng)建的線程不能執(zhí)行,必須向系統(tǒng)進行注冊、分配必要的資源后才能進入可運行狀態(tài),這個步驟是由start操作完成的,而處于可運行狀態(tài)的線程也未必一定處于運行中,它有可能由于外部的i/o請求而處于不運行狀態(tài)。進入消亡狀態(tài)后,此線程就不再存在了。
一個線程創(chuàng)建之后,總是處于其生命周期的4個狀態(tài)之一中,線程的狀態(tài)表明此線程當前正在進行的活動,而線程的狀態(tài)是可以通過程序來進行控制的,就是說,可以對線程進行操作來改變狀態(tài)。 這些操作包括啟動(start)、終止(stop)、睡眠(sleep)、掛起(suspend)、恢復(fù)(resume)、等待(wait)和通知(notify)。每一個操作都對應(yīng)了一個方法 這些方法是由軟件包java.lang提供的。通過各種操作,線程的4個狀態(tài)之間可按圖1所示進行轉(zhuǎn)換。
2.1 創(chuàng)建(new)狀態(tài)
java的線程機制
摘 要: 多線程機制是java的重要技術(shù),闡述了線程和進程的差別;java中線程4個狀態(tài)之間的轉(zhuǎn)換;并結(jié)合例子說明了兩種創(chuàng)建線程的方法。
關(guān)鍵詞: 線程 消亡 阻塞 調(diào)度
線程是指程序中能順序執(zhí)行的一個序列。一個線程只有一個入口點 但可能有幾個出口點 不過,每個時刻的執(zhí)行點總是只有一個。線程是不能獨立運行的程序,而只是某個整體程序內(nèi)部的一個順序執(zhí)行流。
多線程是java的一個重要特點。如果一個程序是單線程的,那么,任何時刻都只有一個執(zhí)行點。這種單線程執(zhí)行方法使系統(tǒng)運行效率低,而且,由于必須依靠中斷來處理輸入/輸出。所以,當出現(xiàn)頻繁輸入/輸出或者有優(yōu)先級較低的中斷請求時,實時性就變得很差。多線程系統(tǒng)可以避免這個缺點。所謂多線程,就是通過系統(tǒng)的調(diào)度使幾個具有不同功能的程序流即線程同時并行地運行。
在單處理器計算機系統(tǒng)中,實際上是不可能使多個線程真正并行運行的,而要通過系統(tǒng)用極短的時間、極快的速度對多個線程進行切換,宏觀上形成多個線程并發(fā)執(zhí)行的效果。
1 線程和進程機制上的差別
線程和進程很相象,它們都是程序的一個順序執(zhí)行序列,但兩者又有區(qū)別。進程是一個實體,每個進程有自己獨立的狀態(tài),并有自己的專用數(shù)據(jù)段,創(chuàng)建進程時, 必須建立和復(fù)制其專用數(shù)據(jù)段,線程則互相共享數(shù)據(jù)段。同一個程序中的所有線程只有一個數(shù)據(jù)段, 所以, 創(chuàng)建線程時不必重新建立和復(fù)制數(shù)據(jù)段。由于數(shù)據(jù)段建立和復(fù)制這方面的差異,使線程的建立和線程間的切換速度大大優(yōu)于進程,另一方面,線程又具備進程的大多數(shù)優(yōu)點。
假設(shè)銀行系統(tǒng)辦理存款和取款手續(xù),將帳本看成數(shù)據(jù)段。如果按進程這種機制,那么,當儲戶去存/取款時,銀行應(yīng)先把帳本復(fù)制一遍,為儲戶建立一個獨立的帳本再結(jié)算。如果按線程機制, 那么,銀行里所有的出納員都用同一個帳本,儲戶來辦存/取款時,也從這個帳本直接結(jié)算。用線程機制省去了數(shù)據(jù)段復(fù)制這一步顯然是線程獨具的特點。
由于多個線程共享一個數(shù)據(jù)段,所以,也出現(xiàn)了數(shù)據(jù)訪問過程的互斥和同步問題,這使系統(tǒng)管理功能變得相對復(fù)雜。
總的來說,一個多線程系統(tǒng)在提高系統(tǒng)的輸入/輸出速度、有效利用系統(tǒng)資源、改善計算機通信功能以及發(fā)揮多處理器硬件功能方面顯示了很大優(yōu)勢。因此,一些最新的操作系統(tǒng)如windows95、windows98、windows nt等都提供了對多線程的支持。但是,在多線程操作系統(tǒng)下設(shè)計多線程的程序仍然是一個比較復(fù)雜和困難的工作。由于需要解決對數(shù)據(jù)段的共享,所以,原則上應(yīng)該從程序設(shè)計角度采用加鎖和釋放措施,稍有不慎,便會使系統(tǒng)產(chǎn)生管理上的混亂。 而java從語言一級提供對多線程的支持,這樣,可由語言和運行系統(tǒng)聯(lián)合提供對共享數(shù)據(jù)段的管理功能和同步機制,使得多線程并行程序設(shè)計相對比較容易。
2 java線程的生命周期
每個線程都是和生命周期相聯(lián)系的,一個生命周期含有多個狀態(tài),這些狀態(tài)間可以互相轉(zhuǎn)化。
java的線程的生命周期可以分為4個狀態(tài);創(chuàng)建(new)狀態(tài);可運行(runnable)狀態(tài);不執(zhí)行(notrunnable)狀態(tài);消亡(dead)狀態(tài)。
創(chuàng)建狀態(tài)是指創(chuàng)建一個線程對應(yīng)的對象的過程,java系統(tǒng)中,些對象都是從java.lang包內(nèi)一個稱為thread的類用關(guān)鍵字new創(chuàng)建的。剛創(chuàng)建的線程不能執(zhí)行,必須向系統(tǒng)進行注冊、分配必要的資源后才能進入可運行狀態(tài),這個步驟是由start操作完成的,而處于可運行狀態(tài)的線程也未必一定處于運行中,它有可能由于外部的i/o請求而處于不運行狀態(tài)。進入消亡狀態(tài)后,此線程就不再存在了。
一個線程創(chuàng)建之后,總是處于其生命周期的4個狀態(tài)之一中,線程的狀態(tài)表明此線程當前正在進行的活動,而線程的狀態(tài)是可以通過程序來進行控制的,就是說,可以對線程進行操作來改變狀態(tài)。 這些操作包括啟動(start)、終止(stop)、睡眠(sleep)、掛起(suspend)、恢復(fù)(resume)、等待(wait)和通知(notify)。每一個操作都對應(yīng)了一個方法 這些方法是由軟件包java.lang提供的。通過各種操作,線程的4個狀態(tài)之間可按圖1所示進行轉(zhuǎn)換。
2.1 創(chuàng)建(new)狀態(tài)
熱門點擊
- HF-90H超小型跳頻短波電臺
- IrDA紅外通信在導(dǎo)航儀中的應(yīng)用
- 如何快速判斷你的網(wǎng)段內(nèi)誰的網(wǎng)卡處在混雜模式
- 基于免費軟件ns2的網(wǎng)絡(luò)仿真
- Myrinet系統(tǒng)軟件GM分析
- 船載交換式網(wǎng)絡(luò)使用雙冗余網(wǎng)卡對網(wǎng)絡(luò)性能的影響
- 遠距離多機分時雙工通信芯片SR331
- IP電話及其在線纜調(diào)制解調(diào)系統(tǒng)上的應(yīng)用
- MHW7222A型放大器在校園CATV干線系
- CDMA移動臺接收機的實現(xiàn)研究
推薦技術(shù)資料
- AMOLED顯示驅(qū)動芯片關(guān)鍵技
- CMOS圖像傳感器技術(shù)參數(shù)設(shè)計
- GB300 超級芯片應(yīng)用需求分
- 4NP 工藝NVIDIA Bl
- GB300 芯片、NVL72
- 首個最新高端芯片人工智能服務(wù)器
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究