java2程序設(shè)計(jì)基礎(chǔ)第十一章

java2程序設(shè)計(jì)基礎(chǔ)第十一章

ID:36206070

大?。?75.00 KB

頁(yè)數(shù):23頁(yè)

時(shí)間:2019-05-07

java2程序設(shè)計(jì)基礎(chǔ)第十一章_第1頁(yè)
java2程序設(shè)計(jì)基礎(chǔ)第十一章_第2頁(yè)
java2程序設(shè)計(jì)基礎(chǔ)第十一章_第3頁(yè)
java2程序設(shè)計(jì)基礎(chǔ)第十一章_第4頁(yè)
java2程序設(shè)計(jì)基礎(chǔ)第十一章_第5頁(yè)
資源描述:

《java2程序設(shè)計(jì)基礎(chǔ)第十一章》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)

1、第11章多線程教學(xué)提示:在同時(shí)處理多個(gè)任務(wù)的應(yīng)用中,多線程的意義顯得尤其重要,本章將介紹多線程的內(nèi)容,主要包括線程的概念、線程的創(chuàng)建、線程間的同步與通信,以及線程的生命周期和狀態(tài)控制,并說(shuō)明使用多線程時(shí)應(yīng)該注意的問(wèn)題。學(xué)習(xí)完本章之后,讀者將對(duì)Java多線程機(jī)制有一個(gè)全面的了解。教學(xué)目標(biāo):理解線程的概念,熟練掌握線程的創(chuàng)建、線程間的同步與通信,以及線程的生命周期和狀態(tài)控制,并牢記使用多線程時(shí)應(yīng)該注意的問(wèn)題。11.1線程的概念在介紹線程前有必要簡(jiǎn)要介紹一下進(jìn)程,這將有助于讀者理解線程概念。相信大多數(shù)讀者都知道,在Windows操作系統(tǒng)中可以同時(shí)執(zhí)行多個(gè)程序,比如打開一個(gè)資源管理器和多

2、個(gè)IE瀏覽器,同時(shí)使用播放器播放音樂(lè),后臺(tái)可能同時(shí)還有殺毒軟件防火墻在運(yùn)行,這里的每一個(gè)運(yùn)行的程序都是一個(gè)進(jìn)程。嚴(yán)格地說(shuō),這種說(shuō)法是不準(zhǔn)確的。程序一般是指保存在外部存儲(chǔ)器(一般為硬盤)中的代碼文件,當(dāng)程序被執(zhí)行時(shí),系統(tǒng)會(huì)先在內(nèi)存中為其分配一塊空間,再把其代碼復(fù)制到該空間中執(zhí)行,這個(gè)在由系統(tǒng)分配的內(nèi)存空間中執(zhí)行的程序才是進(jìn)程。一個(gè)程序可能同時(shí)存在多個(gè)相應(yīng)的進(jìn)程,如同時(shí)打開多個(gè)IE瀏覽器,每一個(gè)瀏覽器窗口都是一個(gè)進(jìn)程,都擁有自己獨(dú)立的內(nèi)存空間,而它們都來(lái)自于同一個(gè)程序。11.2線程的創(chuàng)建對(duì)于一個(gè)用Java編寫的進(jìn)程來(lái)說(shuō),在Java虛擬機(jī)啟動(dòng)之初,會(huì)且只會(huì)產(chǎn)生一個(gè)獨(dú)一的非守護(hù)線程(守護(hù)

3、線程將在稍后介紹),具有代表性的是類中靜態(tài)方法main()產(chǎn)生的線程,該線程為主線程,可以創(chuàng)建和控制其他線程。11.2.1繼承自類Thread11.2.2實(shí)現(xiàn)接口Runnable11.2.3兩種創(chuàng)建線程方式的對(duì)比11.2.4守護(hù)線程Daemon11.2.1繼承自類Thread類Thread位于java.lang包中,由于java.lang包被自動(dòng)包含入每個(gè)Java文件中,所以可以直接使用類Thread而無(wú)需編寫import語(yǔ)句。返回11.2.2實(shí)現(xiàn)接口RunnableRunnable接口非常簡(jiǎn)單,其全貌如下:publicinterfaceRunnable{voidrun();}返

4、回11.2.3兩種創(chuàng)建線程方式的對(duì)比Thread是Java已經(jīng)嚴(yán)格封裝好了的類,在面向?qū)ο笏枷胫校^承這樣的類并修改或擴(kuò)充它不是十分可取的。因?yàn)榭赡軙?huì)出現(xiàn)人為失誤,對(duì)一個(gè)類進(jìn)行繼承修改或擴(kuò)充,將可能導(dǎo)致該子類出現(xiàn)不可預(yù)料的錯(cuò)誤。返回11.2.4守護(hù)線程Daemon線程分為用戶線程和守護(hù)線程兩種。用戶線程即一般線程,守護(hù)線程是具有如下特性的線程:它會(huì)在所有用戶線程(即非守護(hù)線程)結(jié)束之后立即被Java虛擬機(jī)結(jié)束,而不管其是否已執(zhí)行完畢,從而結(jié)束整個(gè)進(jìn)程。守護(hù)線程往往處于無(wú)限循環(huán)中,用于監(jiān)聽其他線程(一般是用戶線程,也可以是其他守護(hù)線程)的運(yùn)行,并提供某種通用性的服務(wù),典型的如Int

5、ernet中收發(fā)E-mail郵件的服務(wù)。通過(guò)線程對(duì)象的isDaemon()方法可以判斷該線程是否為守護(hù)線程,通過(guò)setDaemon()方法可以改變?cè)摼€程的類型——setDaemon(false)將線程改為用戶線程,setDaemon(true)將線程改為守護(hù)線程。該方法必須在調(diào)用線程的start()方法前調(diào)用才有效,否則線程將為默認(rèn)的線程類型——由用戶線程創(chuàng)建的線程默認(rèn)為用戶線程,由守護(hù)線程創(chuàng)建的線程默認(rèn)為守護(hù)線程,main()方法產(chǎn)生的主線程始終為用戶線程。返回11.3線程的同步在單線程的進(jìn)程中,一個(gè)進(jìn)程一次只能執(zhí)行一個(gè)任務(wù),一次只能使用一個(gè)資源,不需要考慮兩個(gè)或更多個(gè)任務(wù)同時(shí)

6、試圖使用同一個(gè)資源的問(wèn)題,如兩個(gè)任務(wù)同時(shí)修改同一個(gè)數(shù)據(jù),或同時(shí)進(jìn)行打印操作而只有一臺(tái)打印機(jī)。然而在多線程環(huán)境下,這種多個(gè)線程試圖同時(shí)使用相同且有限的資源的情況,是很有可能發(fā)生的,若不提供某種機(jī)制避免這種情況的出現(xiàn),后果將可能是非常嚴(yán)重且不可預(yù)料的,如造成某些線程數(shù)據(jù)的不一致,使某些線程陷入無(wú)限循環(huán)永遠(yuǎn)無(wú)法退出,破壞某些關(guān)鍵文件或數(shù)據(jù)庫(kù)中的重要數(shù)據(jù)。11.3.1資源沖突11.3.2同步機(jī)制11.3.3同步效率11.3.1資源沖突這是一段完整可編譯的代碼,提供了reduceMainData()方法用于遞減私有的主數(shù)據(jù),在run()方法中保存主數(shù)據(jù)與打印主數(shù)據(jù)之前進(jìn)行了多達(dá)102400

7、0次的浮點(diǎn)運(yùn)算用于延緩線程運(yùn)行,這將使得該線程在此處很可能被暫停。此時(shí)若main()主線程被調(diào)度到CPU執(zhí)行,它很可能會(huì)遞減該線程的主數(shù)據(jù),從而造成打印時(shí)主數(shù)據(jù)與備份數(shù)據(jù)的不一致。返回11.3.2同步機(jī)制我們永遠(yuǎn)無(wú)法知道線程什么時(shí)候開始執(zhí)行(并不是在創(chuàng)建它的時(shí)刻,它便開始執(zhí)行的),也無(wú)法知道它什么時(shí)候會(huì)被暫停,更加無(wú)從得知在暫停期間其他線程會(huì)對(duì)它進(jìn)行怎樣的訪問(wèn)控制,這是多線程環(huán)境下線程的根本性質(zhì)。由此產(chǎn)生的資源沖突問(wèn)題是代碼編寫者必須考慮的,至少在重要的時(shí)刻必須避免關(guān)鍵資源的沖突

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

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

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