Java 多線程與并發(fā)編程總結(jié)

Java 多線程與并發(fā)編程總結(jié)

ID:47162182

大?。?1.50 KB

頁數(shù):14頁

時間:2019-08-14

Java 多線程與并發(fā)編程總結(jié)_第1頁
Java 多線程與并發(fā)編程總結(jié)_第2頁
Java 多線程與并發(fā)編程總結(jié)_第3頁
Java 多線程與并發(fā)編程總結(jié)_第4頁
Java 多線程與并發(fā)編程總結(jié)_第5頁
資源描述:

《Java 多線程與并發(fā)編程總結(jié)》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫

1、Java多線程與并發(fā)編程總結(jié)??認(rèn)識多任務(wù)、多進(jìn)程、單線程、多線程  要認(rèn)識多線程就要從操作系統(tǒng)的原理說起?! ∫郧肮爬系腄OS操作系統(tǒng)(V6.22)是單任務(wù)的,還沒有線程的概念,系統(tǒng)在每次只能做一件事情。比如你在copy東西的時候不能rename文件名。為了提高系統(tǒng)的利用效率,采用批處理來批量執(zhí)行任務(wù)?! ‖F(xiàn)在的操作系統(tǒng)都是多任務(wù)操作系統(tǒng),每個運(yùn)行的任務(wù)就是操作系統(tǒng)所做的一件事情,比如你在聽歌的同時還在用MSN和好友聊天。聽歌和聊天就是兩個任務(wù),這個兩個任務(wù)是“同時”進(jìn)行的。一個任務(wù)一般對應(yīng)一個進(jìn)程,也可能包含好幾個進(jìn)程。比如運(yùn)行的MSN

2、就對應(yīng)一個MSN的進(jìn)程,如果你用的是windows系統(tǒng),你就可以在任務(wù)管理器中看到操作系統(tǒng)正在運(yùn)行的進(jìn)程信息。  一般來說,當(dāng)運(yùn)行一個應(yīng)用程序的時候,就啟動了一個進(jìn)程,當(dāng)然有些會啟動多個進(jìn)程。啟動進(jìn)程的時候,操作系統(tǒng)會為進(jìn)程分配資源,其中最主要的資源是內(nèi)存空間,因?yàn)槌绦蚴窃趦?nèi)存中運(yùn)行的。在進(jìn)程中,有些程序流程塊是可以亂序執(zhí)行的,并且這個代碼塊可以同時被多次執(zhí)行。實(shí)際上,這樣的代碼塊就是線程體。線程是進(jìn)程中亂序執(zhí)行的代碼流程。當(dāng)多個線程同時運(yùn)行的時候,這樣的執(zhí)行模式成為并發(fā)執(zhí)行?! 《嗑€程的目的是為了最大限度的利用CPU資源?! ava編寫

3、程序都運(yùn)行在在Java虛擬機(jī)(JVM)中,在JVM的內(nèi)部,程序的多任務(wù)是通過線程來實(shí)現(xiàn)的。每用java命令啟動一個java應(yīng)用程序,就會啟動一個JVM進(jìn)程。在同一個JVM進(jìn)程中,有且只有一個進(jìn)程,就是它自己。在這個JVM環(huán)境中,所有程序代碼的運(yùn)行都是以線程來運(yùn)行?! ∫话愠R姷腏ava應(yīng)用程序都是單線程的。比如,用java命令運(yùn)行一個最簡單的HelloWorld的Java應(yīng)用程序時,就啟動了一個JVM進(jìn)程,JVM找到程序程序的入口點(diǎn)main(),然后運(yùn)行main()方法,這樣就產(chǎn)生了一個線程,這個線程稱之為主線程。當(dāng)main方法結(jié)束后,主線

4、程運(yùn)行完成。JVM進(jìn)程也隨即退出。  對于一個進(jìn)程中的多個線程來說,多個線程共享進(jìn)程的內(nèi)存塊,當(dāng)有新的線程產(chǎn)生的時候,操作系統(tǒng)不分配新的內(nèi)存,而是讓新線程共享原有的進(jìn)程塊的內(nèi)存。因此,線程間的通信很容易,速度也很快。不同的進(jìn)程因?yàn)樘幱诓煌膬?nèi)存塊,因此進(jìn)程之間的通信相對困難?! ?shí)際上,操作的系統(tǒng)的多進(jìn)程實(shí)現(xiàn)了多任務(wù)并發(fā)執(zhí)行,程序的多線程實(shí)現(xiàn)了進(jìn)程的并發(fā)執(zhí)行。多任務(wù)、多進(jìn)程、多線程的前提都是要求操作系統(tǒng)提供多任務(wù)、多進(jìn)程、多線程的支持?! ≡贘ava程序中,JVM負(fù)責(zé)線程的調(diào)度。線程調(diào)度是值按照特定的機(jī)制為多個線程分配CPU的使用權(quán)。  調(diào)

5、度的模式有兩種:分時調(diào)度和搶占式調(diào)度。分時調(diào)度是所有線程輪流獲得CPU使用權(quán),并平均分配每個線程占用CPU的時間;搶占式調(diào)度是根據(jù)線程的優(yōu)先級別來獲取CPU的使用權(quán)。JVM的線程調(diào)度模式采用了搶占式模式?! ∷^的“并發(fā)執(zhí)行”、“同時”其實(shí)都不是真正意義上的“同時”。眾所周知,CPU都有個時鐘頻率,表示每秒中能執(zhí)行cpu指令的次數(shù)。在每個時鐘周期內(nèi),CPU實(shí)際上只能去執(zhí)行一條(也有可能多條)指令。操作系統(tǒng)將進(jìn)程線程進(jìn)行管理,輪流(沒有固定的順序)分配每個進(jìn)程很短的一段是時間(不一定是均分),然后在每個線程內(nèi)部,程序代碼自己處理該進(jìn)程內(nèi)部線程

6、的時間分配,多個線程之間相互的切換去執(zhí)行,這個切換時間也是非常短的。因此多任務(wù)、多進(jìn)程、多線程都是操作系統(tǒng)給人的一種宏觀感受,從微觀角度看,程序的運(yùn)行是異步執(zhí)行的?! ∮靡痪湓捵隹偨Y(jié):雖然操作系統(tǒng)是多線程的,但CPU每一時刻只能做一件事,和人的大腦是一樣的,呵呵。???????Java語言的多線程需要操作系統(tǒng)的支持。  Java虛擬機(jī)允許應(yīng)用程序并發(fā)地運(yùn)行多個執(zhí)行線程。Java語言提供了多線程編程的擴(kuò)展點(diǎn),并給出了功能強(qiáng)大的線程控制API?! ≡贘ava中,多線程的實(shí)現(xiàn)有兩種方式:  擴(kuò)展java.lang.Thread類  實(shí)現(xiàn)java.

7、lang.Runnable接口  每個線程都有一個優(yōu)先級,高優(yōu)先級線程的執(zhí)行優(yōu)先于低優(yōu)先級線程。每個線程都可以或不可以標(biāo)記為一個守護(hù)程序。當(dāng)某個線程中運(yùn)行的代碼創(chuàng)建一個新Thread對象時,該新線程的初始優(yōu)先級被設(shè)定為創(chuàng)建線程的優(yōu)先級,并且當(dāng)且僅當(dāng)創(chuàng)建線程是守護(hù)線程時,新線程才是守護(hù)程序?! ‘?dāng)Java虛擬機(jī)啟動時,通常都會有單個非守護(hù)線程(它通常會調(diào)用某個指定類的main方法)。Java虛擬機(jī)會繼續(xù)執(zhí)行線程,直到下列任一情況出現(xiàn)時為止:  調(diào)用了Runtime類的exit方法,并且安全管理器允許退出操作發(fā)生?! 》鞘刈o(hù)線程的所有線程都已停

8、止運(yùn)行,無論是通過從對run方法的調(diào)用中返回,還是通過拋出一個傳播到run方法之外的異常。???擴(kuò)展java.lang.Thread類  運(yùn)行結(jié)果:  main線程運(yùn)行開始!  

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。