程序設計基礎第十一章ppt課件

程序設計基礎第十一章ppt課件

ID:20665790

大?。?79.00 KB

頁數(shù):23頁

時間:2018-10-14

程序設計基礎第十一章ppt課件_第1頁
程序設計基礎第十一章ppt課件_第2頁
程序設計基礎第十一章ppt課件_第3頁
程序設計基礎第十一章ppt課件_第4頁
程序設計基礎第十一章ppt課件_第5頁
資源描述:

《程序設計基礎第十一章ppt課件》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在教育資源-天天文庫。

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

2、如打開一個資源管理器和多個IE瀏覽器,同時使用播放器播放音樂,后臺可能同時還有殺毒軟件防火墻在運行,這里的每一個運行的程序都是一個進程。嚴格地說,這種說法是不準確的。程序一般是指保存在外部存儲器(一般為硬盤)中的代碼文件,當程序被執(zhí)行時,系統(tǒng)會先在內(nèi)存中為其分配一塊空間,再把其代碼復制到該空間中執(zhí)行,這個在由系統(tǒng)分配的內(nèi)存空間中執(zhí)行的程序才是進程。一個程序可能同時存在多個相應的進程,如同時打開多個IE瀏覽器,每一個瀏覽器窗口都是一個進程,都擁有自己獨立的內(nèi)存空間,而它們都來自于同一個程序。11.2線程的創(chuàng)建對于一個用Java編寫的進程來說,在Java虛擬機

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

4、publicinterfaceRunnable{voidrun();}返回11.2.3兩種創(chuàng)建線程方式的對比Thread是Java已經(jīng)嚴格封裝好了的類,在面向?qū)ο笏枷胫?,繼承這樣的類并修改或擴充它不是十分可取的。因為可能會出現(xiàn)人為失誤,對一個類進行繼承修改或擴充,將可能導致該子類出現(xiàn)不可預料的錯誤。返回11.2.4守護線程Daemon線程分為用戶線程和守護線程兩種。用戶線程即一般線程,守護線程是具有如下特性的線程:它會在所有用戶線程(即非守護線程)結束之后立即被Java虛擬機結束,而不管其是否已執(zhí)行完畢,從而結束整個進程。守護線程往往處于無限循環(huán)中,用于監(jiān)

5、聽其他線程(一般是用戶線程,也可以是其他守護線程)的運行,并提供某種通用性的服務,典型的如Internet中收發(fā)E-mail郵件的服務。通過線程對象的isDaemon()方法可以判斷該線程是否為守護線程,通過setDaemon()方法可以改變該線程的類型——setDaemon(false)將線程改為用戶線程,setDaemon(true)將線程改為守護線程。該方法必須在調(diào)用線程的start()方法前調(diào)用才有效,否則線程將為默認的線程類型——由用戶線程創(chuàng)建的線程默認為用戶線程,由守護線程創(chuàng)建的線程默認為守護線程,main()方法產(chǎn)生的主線程始終為用戶線程。返

6、回11.3線程的同步在單線程的進程中,一個進程一次只能執(zhí)行一個任務,一次只能使用一個資源,不需要考慮兩個或更多個任務同時試圖使用同一個資源的問題,如兩個任務同時修改同一個數(shù)據(jù),或同時進行打印操作而只有一臺打印機。然而在多線程環(huán)境下,這種多個線程試圖同時使用相同且有限的資源的情況,是很有可能發(fā)生的,若不提供某種機制避免這種情況的出現(xiàn),后果將可能是非常嚴重且不可預料的,如造成某些線程數(shù)據(jù)的不一致,使某些線程陷入無限循環(huán)永遠無法退出,破壞某些關鍵文件或數(shù)據(jù)庫中的重要數(shù)據(jù)。11.3.1資源沖突11.3.2同步機制11.3.3同步效率11.3.1資源沖突這是一段完整

7、可編譯的代碼,提供了reduceMainData()方法用于遞減私有的主數(shù)據(jù),在run()方法中保存主數(shù)據(jù)與打印主數(shù)據(jù)之前進行了多達1024000次的浮點運算用于延緩線程運行,這將使得該線程在此處很可能被暫停。此時若main()主線程被調(diào)度到CPU執(zhí)行,它很可能會遞減該線程的主數(shù)據(jù),從而造成打印時主數(shù)據(jù)與備份數(shù)據(jù)的不一致。返回11.3.2同步機制我們永遠無法知道線程什么時候開始執(zhí)行(并不是在創(chuàng)建它的時刻,它便開始執(zhí)行的),也無法知道它什么時候會被暫停,更加無從得知在暫停期間其他線程會對它進行怎樣的訪問控制,這是多線程環(huán)境下線程的根本性質(zhì)。由此產(chǎn)生的資源沖突

8、問題是代碼編寫者必須考慮的,至少在重要的時刻必須避免關鍵資源的沖突

當前文檔最多預覽五頁,下載文檔查看全文

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

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