




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第11章多線程編程01線程概述02線程的基本操作03線程同步04線程池和定時器05互斥對象——Mutex1
線程概述主要內(nèi)容
多線程工作方式
何時使用多線程0102多線程工作方式
線程是進(jìn)程中可以并行執(zhí)行的程序段,它可以獨(dú)立占用處理器時間片,同一個進(jìn)程中的線程可以共用進(jìn)程分配的資源和空間。多線程的應(yīng)用程序可以在“同一時刻”處理多項(xiàng)任務(wù)。
默認(rèn)情況下,系統(tǒng)為應(yīng)用程序分配一個主線程,該線程執(zhí)行程序中以Main方法開始和結(jié)束的代碼。[STAThread]staticvoidMain(){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false); Application.Run(newForm1());}何時使用多線程一般情況下,需要用戶交互的軟件都必須盡可能快地對用戶的活動做出反應(yīng),以便提供豐富多彩的用戶體驗(yàn),但同時它又必須執(zhí)行必要的計(jì)算以便盡可能快地將數(shù)據(jù)呈現(xiàn)給用戶,這時可以使用多線程來實(shí)現(xiàn)。通過網(wǎng)絡(luò)與Web服務(wù)器和數(shù)據(jù)庫進(jìn)行通信。執(zhí)行占用大量時間的操作。區(qū)分具有不同優(yōu)先級的任務(wù)。使用戶界面可以在將時間分配給后臺任務(wù)時仍能快速做出響應(yīng)。2
線程的基本操作主要內(nèi)容
線程的創(chuàng)建與啟動
線程的掛起與恢復(fù)
線程休眠
終止線程01020304
線程的優(yōu)先級05
C#中對線程進(jìn)行操作時,主要用到了Thread類,該類位于System.Threading命名空間下。創(chuàng)建一個線程非常簡單,只需將其聲明并為其提供線程起始點(diǎn)處的方法委托即可。創(chuàng)建新的線程時,需要使用Thread類,Thread類具有接受一個ThreadStart委托或ParameterizedThreadStart委托的構(gòu)造函數(shù),該委托包裝了調(diào)用Start方法時由新線程調(diào)用的方法。創(chuàng)建了Thread類的對象之后,線程對象已存在并已配置,但并未創(chuàng)建實(shí)際的線程,這時,只有在調(diào)用Start方法后,才會創(chuàng)建實(shí)際的線程。線程的創(chuàng)建與啟動publicvoidStart()publicvoidStart(Objectparameter)語法publicvoidSuspend()線程的掛起與恢復(fù)publicvoidResume()
線程的掛起線程的恢復(fù)publicstaticvoidSleep(intmillisecondsTimeout)線程休眠publicstaticvoidSleep(TimeSpantimeout)
將當(dāng)前線程掛起指定的時間將當(dāng)前線程阻止指定的時間量publicvoidAbort()publicvoidAbort(ObjectstateInfo)終止線程publicvoidJoin()publicboolJoin(intmillisecondsTimeout)publicboolJoin(TimeSpantimeout)
Abort方法Join方法線程的優(yōu)先級優(yōu)先級值說
明AboveNormal可以將Thread安排在具有Highest優(yōu)先級的線程之后,在具有Normal優(yōu)先級的線程之前BelowNormal可以將Thread安排在具有Normal優(yōu)先級的線程之后,在具有Lowest優(yōu)先級的線程之前Highest可以將Thread安排在具有任何其他優(yōu)先級的線程之前Lowest可以將Thread安排在具有任何其他優(yōu)先級的線程之后Normal可以將Thread安排在具有AboveNormal優(yōu)先級的線程之后,在具有BelowNormal優(yōu)先級的線程之前。默認(rèn)情況下,線程具有Normal優(yōu)先級使用線程實(shí)現(xiàn)大容量數(shù)據(jù)的計(jì)算,這里要求計(jì)算7的50次冪、2的2次冪和2的4次冪。3
線程同步主要內(nèi)容
lock關(guān)鍵字
線程監(jiān)視器——Monitor0102lock關(guān)鍵字語法lock關(guān)鍵字可以用來確保代碼塊完成運(yùn)行,而不會被其他線程中斷,它是通過在代碼塊運(yùn)行期間為給定對象獲取互斥鎖來實(shí)現(xiàn)的。lock語句以關(guān)鍵字lock開頭,它有一個作為參數(shù)的對象,在該參數(shù)的后面還有一個一次只能有一個線程執(zhí)行的代碼塊。ObjectthisLock=newObject();lock(thisLock){//要運(yùn)行的代碼塊}線程監(jiān)視器——Monitor語法Monitor類提供了同步對對象的訪問機(jī)制,它通過向單個線程授予對象鎖來控制對對象的訪問,對象鎖提供限制訪問代碼塊(通常稱為臨界區(qū))的能力。當(dāng)一個線程擁有對象鎖時,其他任何線程都不能獲取該鎖。Monitor.Enter(obj); Console.WriteLine("i的初始值為:"+i.ToString());Thread.Sleep(1000);i++;Console.WriteLine("i在自增之后的值為:"+i.ToString());Monitor.Exit(obj);方
法說
明Enter在指定對象上獲取排他鎖Exit釋放指定對象上的排他鎖Wait釋放對象上的鎖并阻止當(dāng)前線程,直到它重新獲取該鎖4
線程池和定時器線程池語法
線程池通過為應(yīng)用程序提供一個由系統(tǒng)管理的輔助線程池,使您可以更為有效地使用線程。.NET中的ThreadPool類用來提供一個線程池,該線程池可用于執(zhí)行任務(wù)、發(fā)送工作項(xiàng)、處理異步I/O、代表其他線程等待以及處理計(jì)時器。
如果要請求由線程池中的一個線程來處理工作項(xiàng),需要使用QueueUserWorkItem方法,該方法將對被從線程池中選定的線程調(diào)用的方法或委托的引用用作參數(shù)。publicstaticboolQueueUserWorkItem(WaitCallbackcallBack)
publicstaticboolQueueUserWorkItem(WaitCallbackcallBack,Objectstate)
每個進(jìn)程都有一個線程池。從.NETFramework4開始,進(jìn)程的線程池的默認(rèn)大小由虛擬地址空間的大小等多個因素決定。進(jìn)程可以調(diào)用GetMaxThreads方法以確定線程的數(shù)量。使用
SetMaxThreads方法可以更改線程池中的線程數(shù)。每個線程使用默認(rèn)的堆棧大小并按照默認(rèn)的優(yōu)先級運(yùn)行。定時器語法.NET中的Timer類表示定時器,用來提供以指定的時間間隔執(zhí)行方法的機(jī)制。使用TimerCallback委托指定希望Timer執(zhí)行的方法。定時器委托在構(gòu)造計(jì)時器時指定,并且不能更改,此方法不在創(chuàng)建計(jì)時器的線程上執(zhí)行,而是在系統(tǒng)提供的ThreadPool線程上執(zhí)行。publicTimer(TimerCallbackcallback)publicTimer(TimerCallbackcallback,Objectstate,intdueTime,intperiod)publicTimer(TimerCallbackcallback,Objectstate,longdueTime,longperiod)publicTimer(TimerCallbackcallback,Objectstate,TimeSpandueTime,TimeSpanperiod)publicTimer(TimerCallbackcallback,Objectstate,uintdueTime,uintperiod)Timer類最常用的方法有兩個,一個是Change方法,用來更改計(jì)時器的啟動時間和方法調(diào)用之間的間隔;另外一個是Dispose方法,用來釋放由Timer對象使用的所有資源。5
互斥對象——Mutex互斥對象——Mutex語法Mutex類是同步基元,它只向一個線程授予對共享資源的獨(dú)占訪問權(quán)。如果一個線程獲取了互斥體,則要獲取該互斥體的第二個線程將被掛起,直到第一個線程釋放該互斥體。Mutex類與監(jiān)視器類似,它防止多個線程在某一時間同時執(zhí)行某個代碼塊,然而與監(jiān)視器不同的是,Mutex類可以用來使跨進(jìn)程的線程同步。
可以使用Mutex類的WaitOne方法請求互斥體的所屬權(quán),擁有互斥體的線程可以在對WaitOne方法的重復(fù)調(diào)用中請求相同的互斥體而不會阻止其執(zhí)行,但線程必須調(diào)用同樣多次數(shù)的Mutex類的ReleaseMutex方法來釋放互斥體的所屬權(quán)。Mutex類強(qiáng)制線程標(biāo)識,因此互斥體只能由獲得它的線程釋放。Mutex類的常用方法方
法說
明Close在派生類中被重寫時,釋放由當(dāng)前WaitHandle持有的所有資源ReleaseMutex釋放Mutex一次WaitOne當(dāng)在派生類中重寫時,阻止當(dāng)前線程,直到當(dāng)前的WaitHandle收到信號小結(jié)本章首先對線程的分類及概述做了一個簡單地介紹,然后詳細(xì)講解了C#中進(jìn)行線程編程的主要類Thread,并對線程編程的常用操作、線程同步與互斥,以及線程池和定時器的使用進(jìn)行了詳細(xì)講解。通過本章的學(xué)習(xí),讀者應(yīng)該熟練掌握使用
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 石家莊工商職業(yè)學(xué)院《工程流體力學(xué)基礎(chǔ)A》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣西國際商務(wù)職業(yè)技術(shù)學(xué)院《Photoshop》2023-2024學(xué)年第二學(xué)期期末試卷
- 漳州理工職業(yè)學(xué)院《牙體牙髓病學(xué)A》2023-2024學(xué)年第二學(xué)期期末試卷
- 天津音樂學(xué)院《小企業(yè)會計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 貴州工業(yè)職業(yè)技術(shù)學(xué)院《籃球主項(xiàng)提高課》2023-2024學(xué)年第二學(xué)期期末試卷
- 濟(jì)南幼兒師范高等專科學(xué)校《制藥工程專業(yè)綜合實(shí)驗(yàn)(一)》2023-2024學(xué)年第二學(xué)期期末試卷
- 萍鄉(xiāng)衛(wèi)生職業(yè)學(xué)院《景觀設(shè)計(jì)基礎(chǔ)》2023-2024學(xué)年第二學(xué)期期末試卷
- 環(huán)境響應(yīng)式設(shè)計(jì)-洞察及研究
- mRNA疫苗遞送系統(tǒng)-第1篇-洞察及研究
- 對話式輿情監(jiān)測-洞察及研究
- 危險化學(xué)品-經(jīng)營安全管理制度與崗位操作流程
- 大洲大洋說課課件
- 招聘心里測試題及答案
- 高校教師資格證考試《高等教育學(xué)》真題及解析(2025年新版)
- T/SHSOT 015.1-2024皮膚角質(zhì)層膠帶剝離方法及應(yīng)用第1部分:角質(zhì)層剝離方法
- 上海市靜安區(qū)2023-2024學(xué)年八年級下學(xué)期期末語文試題(解析版)
- 2025年中醫(yī)基礎(chǔ)理論考試試題及答案
- 銀行個人資產(chǎn)證明信(8篇)
- 合同款項(xiàng)代付協(xié)議書
- 2025甘肅省農(nóng)墾集團(tuán)有限責(zé)任公司招聘生產(chǎn)技術(shù)人員145人筆試參考題庫附帶答案詳解
- 2025年春季《中華民族共同體概論》第四次平時作業(yè)-國開(XJ)-參考資料
評論
0/150
提交評論