亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

C# 線程--第二線程方法

2019-11-17 02:33:08
字體:
供稿:網(wǎng)友

C# 線程--第二線程方法

概述

  上一章節(jié)中和大家分享了線程的基礎(chǔ)使用方法。在這一章中來和大家分享線程的一些常用方法。

  主要包括:線程阻塞,線程終止,線程鎖三方面。

Thread 的Sleep 和 Join 方法

Thread.Sleep:將當(dāng)前線程阻塞指定的毫秒數(shù)。

Console.WriteLine("主線程執(zhí)行時(shí)間:{0}", DateTime.Now.ToString());Thread.Sleep(4000);  //阻塞4sConsole.WriteLine("主線程執(zhí)行時(shí)間:{0}", DateTime.Now.ToString());

輸出結(jié)果:

兩次打印輸出間隔為:4秒。線程阻塞以毫秒為單位。

Sleep也支持TimeSpan,將當(dāng)前線程阻塞指定的時(shí)間。

Thread.Join:阻塞調(diào)用線程,直到某個(gè)線程終止時(shí)為止。

第一次看到msdn的解釋一下子沒有反應(yīng)過來。這里我們可以理解為:分別開啟三個(gè)線程t1,t2,t3對(duì)t1,t2,t3依次調(diào)用Join后,程序會(huì)先把線程t1執(zhí)行完后,在執(zhí)行線程t2的內(nèi)容..以此類推到t3。

如下代碼所示:

 1 var watch = Stopwatch.StartNew(); 2 Thread t1 = new Thread(() => 3 { 4     Thread.Sleep(4000); 5     Console.WriteLine("t1 is ending."); 6 }); 7 t1.Start(); 8 t1.Join(); 9 Console.WriteLine("t1.Join() returned.");10 11 Thread t2 = new Thread(() =>12 {13     Thread.Sleep(1000);14     Console.WriteLine("t2 is ending.");15 });16 t2.Start();17 t2.Join();18 Console.WriteLine("t2.Join() returned.");19 20 Console.WriteLine("總結(jié):Join()會(huì)阻塞調(diào)用線程直到調(diào)用線程結(jié)束." + watch.ElapsedMilliseconds);    

輸出結(jié)果:

程序先執(zhí)行線程t1里的內(nèi)容,讓線程阻塞4秒,因?yàn)榫€程t1調(diào)用Join()方法阻塞調(diào)用線程,直到t1線程執(zhí)行完成。

然后打印出“t1.Join() returned.”。在執(zhí)行t2線程,直到t2線程執(zhí)行完后才執(zhí)行主線程打印的內(nèi)容。

這里不難看出他們是按順序來執(zhí)行的。

如果我們不使用join()方法看看他的輸出結(jié)果會(huì)是怎么樣:

var watch = Stopwatch.StartNew();Thread t1 = new Thread(() =>{    Thread.Sleep(4000);    Console.WriteLine("t1 is ending.");});t1.Start();//t1.Join();Console.WriteLine("t1.Join() returned.");Thread t2 = new Thread(() =>{    Thread.Sleep(1000);    Console.WriteLine("t2 is ending.");});t2.Start();//t2.Join();Console.WriteLine("t2.Join() returned.");Console.WriteLine("總結(jié):Join()會(huì)阻塞調(diào)用線程直到調(diào)用線程結(jié)束." + watch.ElapsedMilliseconds);

輸出結(jié)果:

此時(shí)主線程會(huì)先開啟t1線程,t1被阻塞4秒 。所以t1線程里的內(nèi)容沒有被打印出來,會(huì)在4秒后打印。

這時(shí)主線程不會(huì)等待t1線程完成后在執(zhí)行下面代碼,主線程會(huì)繼續(xù)向下執(zhí)行打印出“t1.Join() returned.”

然后開啟t2線程,t2線程同樣也會(huì)被阻塞了1秒。

主線程會(huì)繼續(xù)向下執(zhí)行打印出其他內(nèi)容。最后陸續(xù)由線程t2,線程t1打印出各自對(duì)應(yīng)信息。

Thread 的Abort 和Interrupt

Thread.Abort:在調(diào)用此方法的線程上引發(fā)ThreadAbortException,以開始終止此線程的過程。調(diào)用此方法通常會(huì)終止線程。

 1 Thread t1 = new Thread(() => 2 { 3     for (int i = 0; i < 4; i++) 4     { 5         try 6         { 7             Thread.Sleep(400); 8         } 9         catch (ThreadAbortException ex)10         {11             Console.WriteLine("Abort終止線程.當(dāng)前線程名稱:{0}.狀態(tài):{1}", Thread.CurrentThread.Name, Thread.CurrentThread.ThreadState);12         }13         Console.WriteLine("我在運(yùn)行著!");14     }15 16 });17 t1.Name = "t1";18 t1.Start();19 Thread.Sleep(1000);20 t1.Abort();21 Console.WriteLine("當(dāng)前線程名稱:{0}.狀態(tài):{1}", t1.Name, t1.ThreadState);

輸出結(jié)果:

開啟t1線程,阻塞800毫秒打印了二次“我在運(yùn)行著!”,準(zhǔn)備運(yùn)行第三次時(shí)。

阻塞1000毫秒的主線程調(diào)用Abort()方法直接把t1線程給干掉了.他再也沒有站起來執(zhí)行第四次打印。

當(dāng)前t1線程直接被干掉。

Thread.Abort:中斷處于WaitSleepJoin線程狀態(tài)的線程。

 1 Thread t2 = new Thread(() => 2 { 3     for (int i = 0; i < 4; i++) 4     { 5         try 6         { 7             Thread.Sleep(400); 8             Console.WriteLine("我在運(yùn)行著!"); 9         }10         catch (ThreadInterruptedException ex)11         {12             Console.WriteLine("Interrupt終止線程.當(dāng)前線程名稱:{0}.狀態(tài):{1}", Thread.CurrentThread.Name, Thread.CurrentThread.ThreadState);13         }14     }15 });16 t2.Name = "t2";17 t2.Start();18 Thread.Sleep(1000);19 t2.Interrupt();20 Console.WriteLine("當(dāng)前線程名稱:{0}.狀態(tài):{1}", t2.Name, t2.ThreadState);21 Console.Read();

輸出結(jié)果:

開啟t2線程,阻塞800毫秒打印了二次“我在運(yùn)行著!”,準(zhǔn)備運(yùn)行第三次時(shí)。

阻塞1000毫秒的主線程調(diào)用Interrupt()方法把t2線程第三次阻塞中斷,但t2線程并未被終止,繼續(xù)在運(yùn)行。

直到線程運(yùn)行結(jié)束。

線程鎖

Monitor.Enter() 和Monitor.Exit() :在指定對(duì)象上獲取排他鎖。

先來看一下多線程在訪問共享變量未加鎖的情況:

 1 int number = 0; 2 //沒加鎖 3 for (int i = 0; i < 10; i++) 4 { 5     new Thread(() => 6     { 7         Thread.Sleep(1000);  //堵塞線程.不然線程執(zhí)行時(shí)間太短,體現(xiàn)不出并發(fā)效果 8         Console.WriteLine(number); 9         number++;10     }).Start();11 }

輸出結(jié)果:

我們發(fā)現(xiàn)開啟10個(gè)線程去訪問一個(gè)共享變量number,在沒有加鎖的情況下有5個(gè)線程訪問到的值都是:0。

當(dāng)多個(gè)線程存在并發(fā)的時(shí),難免會(huì)碰到相互沖突的事情。這個(gè)時(shí)候我們就會(huì)用到鎖。

Lock()方法在MSIL中會(huì)被編譯成 Monitor.Enter()和Monitor.Exit()。

在來看看多線程在訪問共享變量加鎖的情況:

 1 //加鎖 2 int number = 0; 3 object objLock = new object(); 4 for (int i = 0; i < 10; i++) 5 { 6     new Thread(() => 7     { 8         Thread.Sleep(100);  //堵塞線程.不然線程執(zhí)行時(shí)間太短,體現(xiàn)不出并發(fā)效果 9 10         Monitor.Enter(objLock);11         Console.WriteLine(number);12         number++;13         Monitor.Exit(objLock);14     }).Start();15 }

輸出結(jié)果:

加鎖后我們發(fā)現(xiàn)多線程在訪問共享變量采用的是排他模式。

每次訪問共享變量都只有一個(gè)線程,其他線程只能等待別的線程訪問完成后才能進(jìn)行訪問。[Monitor.Enter()和Monitor.Exit()必須是成對(duì)使用.]

Monitor.Wait() /Monitor.Pulse() :釋放對(duì)象上的鎖并阻止當(dāng)前線程,直到它重新獲取該鎖。/通知等待隊(duì)列中的線程鎖定對(duì)象狀態(tài)的更改。

 1 object objLock = new object(); 2 new Thread(() =>  3 { 4     Thread.Sleep(1000); 5     Monitor.Enter(objLock); 6  7     Console.WriteLine("我是第一個(gè)出現(xiàn)"); 8     Console.WriteLine("我是第二個(gè)出現(xiàn)"); 9     Monitor.Wait(objLock);10     Console.WriteLine("完成1");11     Monitor.Pulse(objLock);12 13     Monitor.Exit(objLock);14     15 }).Start();16 17 18 new Thread(() =>19 {20     Thread.Sleep(2000);21     Monitor.Enter(objLock);22 23     Monitor.Pulse(objLock);24     Console.WriteLine("我是第三個(gè)出現(xiàn)");25     Console.WriteLine("我是第四個(gè)出現(xiàn)");26     Monitor.Wait(objLock);27     Console.WriteLine("完成2");28 29     Monitor.Exit(objLock);30 }).Start();

輸出結(jié)果:


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
亚洲香蕉成人av网站在线观看| 日韩成人在线电影网| 久久综合色播五月| 在线人体午夜视频| 中文字幕一区二区三区四区免费看| 日韩欧美高清一区二区三区| 四虎永久在线精品无码视频| 成人欧美一区二区三区在线观看| 在线观看一区二区三区四区| 国产制服丝袜在线| 精品国产网站在线观看| 成人激情小说网站| 国产中文字幕乱人伦在线观看| 亚洲小少妇裸体bbw| 2023国产精品自拍| 91午夜在线| 成人日批视频| a国产在线视频| 蜜臀av免费在线观看| 日韩中文字幕在线| 四虎精品一区二区免费| 情趣视频在线观看| 久久久久久久久久影院| 成人午夜av| 男人操女人在线观看| 在线国产伦理一区| 999国产视频| 最近中文字幕在线| 精品免费二区三区三区高中清不卡| 午夜婷婷国产麻豆精品| 欧美精品色网| 国内精品久久久久国产盗摄免费观看完整版| 亚洲综合最新在线| 2023国产一二三区日本精品2022| 岛国精品在线| 国产视频网站一区二区三区| 久操视频免费在线观看| 亚洲成av人**亚洲成av**| 成人美女在线视频| 天堂av在线免费观看| 日本道在线视频| 一区二区三区影视| 色综合久久天天综合网| 免费观看一级一片| 日本电影亚洲天堂| 欧美激情精品久久久久久大尺度| 精品入口麻豆传煤| 黄毛片在线观看| 久久久久久久久久久91| 免费观看久久久4p| 自拍偷拍视频亚洲| 在线播放日韩导航| 亚洲黄色免费| 欧美午夜精品久久久久免费视| 999国产精品视频免费| 亚洲综合第一| 精品人妻无码一区| 久久精品无码一区二区三区| 精品免费国产一区二区三区四区| 在线观看日韩一区二区| 激情小说网站亚洲综合网| 中文字幕乱在线伦视频乱在线伦视频| 成人欧美一区二区三区视频| 国产激情在线免费观看| 久久机热这里只有精品| 男女啪啪免费体验区| 国产精品69毛片高清亚洲| 日韩一级片免费在线观看| 香港一级纯黄大片| 成人av毛片在线观看| 午夜影院网站| 天堂中文8资源在线8| 综合国产精品久久久| 91精品欧美福利在线观看| 黄色aaa毛片| 天堂在线www天堂中文在线| 91九色蝌蚪91por成人| 农村一级毛片| 日本特黄久久久高潮| 91免费高清视频| 91视频免费观看网站| 日韩欧美精品在线不卡| 97色在线观看免费视频| 蜜臀av中文字幕| 另类图片激情| 超碰免费在线97| jizzjizzji欧美| 天天干天天操天天干天天操| 亚洲mm色国产网站| 色狠狠综合天天综合综合| 久久久青草婷婷精品综合日韩| 999大胆视频| 男人在线资源站| 国产乱妇乱子| 在线观看a网站| 亚洲AV无码成人精品区明星换面| 国产精品中文字幕在线观看| 九色视频成人自拍| 黄色一级免费视频| 欧美日韩在线精品成人综合网| 毛片激情在线观看| 亚洲国产一区二区三区在线播放| 97人妻精品一区二区三区免费| 久草在线国产| 在线观看av日韩| 亚洲国产日韩欧美综合久久| 天堂网在线资源| 精品一区在线播放| 你微笑时很美电视剧整集高清不卡| 日本成人超碰在线观看| 91免费在线看| 毛片网站免费| 国产富婆一区二区三区| 欧美日韩国产精品自在自线| 国产精品一区二区精品| 国产日韩欧美电影在线观看| 国产一线二线在线观看| 日本私人网站在线观看| 苍井空浴缸大战猛男120分钟| 成人做爽爽免费视频| 亚洲视频 欧洲视频| 亚洲网站情趣视频| 亚洲一级黄色录像| 热99精品里视频精品| 亚洲欧美精品日韩欧美| 国产精品美女www爽爽爽| 受虐m奴xxx在线观看| 成人在线激情网| 7777精品伊人久久久大香线蕉超级流畅| 欧美18视频| 无码精品黑人一区二区三区| 免费视频爱爱太爽了| 亚洲欧美激情视频在线观看一区二区三区| 国产一级大片在线观看| 久久99精品久久久久久| 青娱乐国产在线视频| 色猫av在线| 在线国产视频| 熟妇女人妻丰满少妇中文字幕| 国产成人精品亚洲精品| 亚洲av成人片色在线观看高潮| 香蕉久久a毛片| 欧美午夜一区二区三区| 91视频网址免费观看| 影音先锋国产在线资源| 97超碰国产在线| 中文字幕人妻一区二区三区| 青青草一区二区三区| 在线观看欧美一区| 姑娘第5集在线观看免费好剧| 久久亚洲精品一区| 伊人久久大香线蕉综合75| 欧美高清一级片| 国产久一一精品| 综合久久十次| 午夜日韩福利| 亚洲黄色在线免费观看| 免费看国产精品一二区视频| 久久久精品一区二区毛片免费看| 亚洲人成电影在线| 亚洲视频网站在线观看| 欧美日韩一区自拍| 青青青视频在线播放| 国产片高清在线观看| 国产羞羞视频在线播放| 久久久亚洲精品无码| 欧美电影精品一区二区| 免费一区二区三区在线观看| 爽爽窝窝午夜精品一区二区| 国产精品视频第一区二区三区| 国产极品视频| 丰腴饱满的极品熟妇| xxxx69·hdxxxxx| 久久久久久久久久久久久国产精品| www视频在线| 好吊色视频988gao在线观看| 色戒汤唯在线| 久久久久国产精品麻豆| 亚洲一级中文字幕| 日本wwwcom| 91av福利视频| 国产精品久久久久久久久久久久久久久久| 一区二区三区四区五区视频在线观看| 亚洲国产精品久久久久爰色欲| 欧美另类精品xxxx孕妇| 色一情一乱一伦一区二区三欧美| 无遮挡动作视频在线观看免费入口| 午夜伦理福利在线| 亚洲精品欧美一区二区三区| 免费观看成年人视频在线观看| 美女免费视频一区二区| 亚洲国产精品无码久久久久高潮| 亚洲男同性恋视频| 超碰成人免费| 免费看美剧网站| 青青青国产在线| 国产无遮挡猛进猛出免费软件| 国产高清精品软件丝瓜软件| jiujiure精品视频播放| 亚洲色婷婷一区二区三区| 日本欧美大码aⅴ在线播放| 久久久国产精品午夜一区ai换脸| 国产凹凸在线观看一区二区| 国产一级aa大片毛片| 欧美综合社区国产| 精品亚洲一区二区三区四区五区高| 色www永久免费视频首页在线| 久久亚洲精品爱爱| 日韩美女视频一区二区| 日韩av一级电影| a v视频在线观看| 国产一区日韩一区| 亚洲三级视频网站| 99久久精品久久久久久ai换脸| 黑人巨大精品欧美一区| 婷婷综合网站| 一卡二卡三卡四卡五卡| 成年人视频网站免费| 99久久精品国产一区色| 高清乱码免费看污| 日韩一区二区精品视频| 亚洲午夜在线视频| 欧美一级爱爱视频| 国产乱码字幕精品高清av| 三级久久三级久久| 69av视频在线| 久久久一二三区| 最近2019中文免费高清视频观看www99| 一区二区在线观看网站| а_天堂中文在线| 91美女福利视频高清| 操人视频在线观看欧美| 亚洲精品性视频| 国产一区二区精品福利地址| 日本精品一区二区三区高清 久久| 成人免费毛片aaaaa**| 国产精品a成v人在线播放| 在线成人精品视频| 亚洲手机视频| 久久视频国产精品免费视频在线| 亚洲人成电影在在线观看网色| 偷拍25位美女撒尿视频在线观看| 精品免费日韩av| 国产色无码精品视频国产| 国产一区一一区高清不卡| jizzjizzjizzjizz| 久热成人在线视频| 欧美精品色一区二区三区| 一二三四在线观看免费高清中文在线观看| 免费在线成人av电影| 91日韩久久| 日日夜夜av| 国内精品美女av在线播放| 精人妻一区二区三区| 日本一级淫片免费放| 一级视频在线观看视频在线啦啦| 夜夜躁狠狠躁日日躁av| 久久精品蜜桃| 深夜福利亚洲| 亚洲激情男女视频| 欧美jizzhd精品欧美巨大免费| 天天操夜夜操国产精品| 最近中文字幕mv免费高清视频8| 亚洲有吗中文字幕| 不卡av中文字幕| xxxxxxxxx欧美| 一区二区三区自拍视频| 国产精品久久精品视| www.好吊色| 国产精品v欧美精品v日韩精品| 国精产品一区一区三区视频| av黄色在线播放| www.久久爱.cn| 娇小11一12╳yⅹ╳毛片| 97久久人人超碰| 99久久这里只有精品| 国产激情一区二区三区桃花岛亚洲| 91精品一区二区三区综合| 日韩午夜小视频| 国产精品一国产精品k频道56| 亚洲精品视频在线播放| 精品视频在线一区二区| 人妻久久一区二区| 少妇一区二区三区四区| 不卡av中文字幕| 国产欧美久久一区二区| 黄色国产网站在线播放| 青青视频免费在线| 亚洲综合中文网| 成人网ww555视频免费看| 久久国产精品免费视频| 999精品一区| 亚洲女人天堂网| 理论片大全免费理伦片| 亚洲图片制服诱惑| 欧美日韩生活片| 欧美一级夜夜爽| 女人床在线观看| 99久久久国产| 欧美一区二区三区免费视| 国产一区二区调教| 免费av在线电影| caoporn视频在线观看| 欧美三级第一页| 91国产精品视频在线| 日韩成人精品视频在线观看| 日韩激情综合| 欧美成人黄色小视频| 国产欧美一区二区精品性色超碰| 日韩精品每日更新| 超碰96在线| 久久久国产视频| 欧美最猛性xxxx| 亚洲高清精品视频| 国产又黄又粗又猛又爽| 欧美一区二区三区综合| 精品一区二区三区视频日产| 国产95在线|亚洲| 国产精品成人国产乱| 成年人的黄色片| 久久夜色精品国产噜噜av小说| 中文字幕av导航| 亚洲国产一区在线| 日韩免费网站| 激情六月丁香婷婷| 五月天亚洲色图| 韩国成人漫画| 最新国产成人在线观看|