c#編程中的多線程處理實例

c#編程中的多線程處理實例

ID:34415309

大?。?70.10 KB

頁數(shù):9頁

時間:2019-03-05

c#編程中的多線程處理實例_第1頁
c#編程中的多線程處理實例_第2頁
c#編程中的多線程處理實例_第3頁
c#編程中的多線程處理實例_第4頁
c#編程中的多線程處理實例_第5頁
資源描述:

《c#編程中的多線程處理實例》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。

1、多線程定義多線程就是使程序并發(fā)(同時)執(zhí)行幾個操作。.NET框架類庫在System.Threading中加入了多線程的能力。因此要在前面加入引用usingSystem.ThreadingThread類:創(chuàng)建并控制線程,設(shè)置其優(yōu)先級并獲取其狀態(tài)。Thread類的構(gòu)造方法,主要有2種:(1)Threadthread_name=Thread(ThreadStart):ThreadStart委托,它表示此線程開始執(zhí)行時要調(diào)用的方法。適用于無參數(shù)的方法。(2)Threadthread_name=Thread(ParameterizedThreadStart):ParameterizedThrea

2、dStart委托,它表示此線程開始執(zhí)行時要調(diào)用的方法。適用于有參數(shù)傳入的方法。一個普通的無參線程操作//定義一個線程,參數(shù)是一個方法,無返回值,采用的是委托Threadtd=newThread(xunhuan);//前臺線程,所有的線程都執(zhí)行完了,應(yīng)用程序才退出,默認的都是前臺線程//后臺線程,所有的前臺線程都執(zhí)行完了,就退出,不管后臺的線程td.IsBackground=true;//設(shè)定為后臺線程td.Start();//啟動線程//定義一個線程,參數(shù)是一個方法,無返回值,采用的是委托Threadtd=newThread(xunhuan);//前臺線程,所有的線程都執(zhí)行完了,應(yīng)用程

3、序才退出,默認的都是前臺線程//后臺線程,所有的前臺線程都執(zhí)行完了,就退出,不管后臺的線程td.IsBackground=true;//設(shè)定為后臺線程td.Start();//啟動線程一個普通的有參線程操作//定義線程,傳入的帶參數(shù)的方法。Threadptd=newThread(showname);ptd.IsBackground=true;//重載Start方法,傳遞個參數(shù)ptd.Start("lilei");有參的方法定義,參數(shù)objec類型//線程調(diào)用,帶多個參數(shù)staticvoidshownames(objectnames){?Listlist=namesasList;?for

4、each(stringnameinlist)?{?????MessageBox.Show(name);?}?}線程狀態(tài)任何時候,線程都要處于某種線程狀態(tài)中。新線程在Unstarted狀態(tài)中開始它的生命周期。在調(diào)用Thread類的Start方法之前,會一直保持在Unstarted狀態(tài),調(diào)用方法之后,就會進入Started狀態(tài),并立即將程序的控制權(quán)返回調(diào)用程序(點了線程調(diào)用后,可以立即去干別的事)。然后,調(diào)用了Start方法的線程(也就是Started線程)和程序中其他的線程并發(fā)執(zhí)行。線程優(yōu)先級每個線程都有個優(yōu)先級,其范圍在ThreadPriority.Lowest和ThreadPrior

5、ity.Highest之間。默認情況下,每個線程的優(yōu)先級都是Normal。Windows操作系統(tǒng)支持時間分片(timeslicing)的概念,它的思路是優(yōu)先級相同的線程共享一個處理器。線程的同步和類監(jiān)視器通常,多個執(zhí)行線程要操作共享數(shù)據(jù)。如果有權(quán)訪問共享數(shù)據(jù)的線程只能讀取數(shù)據(jù),那就不需要阻止多個線程同時訪問共享數(shù)據(jù)。然而,當多個線程共享數(shù)據(jù),并且其中一個或多個線程要修改數(shù)據(jù)時,可能會出現(xiàn)無法預知的結(jié)果。如果一個線程正在更新數(shù)據(jù),另一個線程也試圖更新,那么數(shù)據(jù)所反映的就第二次更新操作之后的結(jié)果。所以可通過一次只允許一個線程訪問用于操作共享數(shù)據(jù)的代碼來解決。其他想要操作數(shù)據(jù)的線程應(yīng)該等待。

6、具有排他訪問權(quán)的線程完成對數(shù)據(jù)的操作后,等待操作線程的數(shù)據(jù)可以繼續(xù)執(zhí)行。這稱為互斥或線程同步。C#提供了兩中解決技術(shù):(1)Monitor類:主要方法(方法傳入的參數(shù)為objec對象,一般為當前調(diào)用的線程):Monitor.Enter():獲取排他鎖。Monitor.Wait():釋放對象上的鎖并阻止當前線程,直到重新獲取該鎖。Monitor.Pulse():通知等待隊列中的線程對象狀態(tài)的改變。Monitor.Exit():釋放排他鎖。(2)lock關(guān)鍵字:在對象前加個lock代碼示例Monitor的用法publicclassmt{privateintage;//buff判斷內(nèi)容是否已

7、被更新或提取,0為未更新,1為已更新privateintbuff=0;intAge{get{Monitor.Enter(this);//獲取此對象的排他鎖if(buff==0)//若內(nèi)容為空或未更新就使此線程等待{MessageBox.Show("內(nèi)容為空或未更新");Monitor.Wait(this);//釋放鎖并等待}buff--;MessageBox.Show("讀取內(nèi)容");Monitor.Pulse(this);//通知等待隊列的線

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

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

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