亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

c#多線程隨記回顧

系統(tǒng) 2425 0

C#多線程隨記回顧

1.創(chuàng)建多線程方式知道的有三種:

?---手動(dòng)創(chuàng)建Thread、使用線程池、使用task任務(wù)

---手動(dòng)創(chuàng)建Thread,分兩種帶參數(shù)和不帶參數(shù)的幫助委托器

eg:? //幫助器委托不帶參數(shù)

??????? //??? ThreadStart ts = new ThreadStart(DoWork)

??????? //??? for (int i = 1; i <= 3; i++)

??????? //??? {

??????? //??????? Thread t = new Thread(ts);

??????? //??????? t.Name = "線程"+i.ToString() ;

??????? //??????? t.Start();

??????? //??? }

??????? //??? Console.Read();

? eg://幫助器委托帶參數(shù)

??????????? ParameterizedThreadStart ts = new ParameterizedThreadStart(DoWork);

??????????? for (int i = 1; i <= 3; i++)

??????????? {

??????????????? Thread t = new Thread(ts);

??????????????? t.Name = "線程" + i.ToString();

??????????????? t.Start(5);??????????? }

??????????? Console.Read();

-------回調(diào)方法:

//委托

f = new FDeletate(Fibonacci);

??????????? AsyncCallback callback = new AsyncCallback(Display);//回調(diào)委托

??????????? int n = Convert.ToInt32(Console.ReadLine());

??????????? f.BeginInvoke(n, callback,"ggds");

??????????? Console.ReadLine();

--回調(diào)方法; = f.EndInvoke(r);將結(jié)果返回

? static void Display(IAsyncResult r)

??????? {

??????????? int result = f.EndInvoke(r);

??????????? Console.WriteLine("第"+r.AsyncState+"項(xiàng)值是"+result);

??????????? Console.Read();

??????? }

-----------補(bǔ)充線程:

----線程是windows任務(wù)調(diào)度最小的單位,線程是程序的一個(gè)執(zhí)行流;

cpu切換的不是進(jìn)程而是線程。進(jìn)程占用資源太多;

--單核cpu一個(gè)時(shí)間只有一個(gè)線程;一個(gè)exe就是一個(gè)進(jìn)程;

一個(gè)線程對(duì)應(yīng)一個(gè)寄存器;

--Process.Start("");

---一個(gè)應(yīng)用程序與只能承載一個(gè)exe,可承載多個(gè)dll;

---一個(gè)進(jìn)程可以有多個(gè)應(yīng)用程序域;

--一個(gè)線程可穿透多個(gè)應(yīng)用程序與,

同一時(shí)間一個(gè)線程指正屬于一個(gè)應(yīng)用程序域;

一個(gè)應(yīng)用程序與可以跑多個(gè)線程;

==一個(gè)應(yīng)用程序與有一個(gè)上下文;

----當(dāng)前線程:

?Thread t = Thread.CurrentThread;

t.name;

-----

?? //后臺(tái)線程;

?? t.IsBackground = true;

--thrad線程是clr線程和操作系統(tǒng)線程是不一樣的;之間是映射關(guān)系;

線程終止:Thread.abort();

前臺(tái)線程和后臺(tái)線程。這兩者的區(qū)別就是:應(yīng)用程序必須運(yùn)行完所有的前臺(tái)線程才可以退出;而對(duì)于后臺(tái)線程,應(yīng)用程序則可以不考慮其是否已經(jīng)運(yùn)行完畢而直接退出,所有的后臺(tái)線程在應(yīng)用程序退出時(shí)都

---會(huì)自動(dòng)結(jié)束。

---默認(rèn)為前臺(tái)線程,thread.isbackground=false;

--線程優(yōu)先級(jí):AboveNormal;

?//默認(rèn)優(yōu)先級(jí):為AboveNormal;

??????????? Thread t = Thread.CurrentThread;

??????????? t.Priority = ThreadPriority.AboveNormal;

-----初始化一個(gè)線程:需要1M內(nèi)存;

委托穿多個(gè)參數(shù)時(shí),可以用list<object>

------windows窗體跨線程調(diào)用時(shí),控制不能跨線程需要設(shè)置:

Control.checkForIllegalcrossThreadcalls=false;不檢查,則能跨線程

-----lamed:

匿名函數(shù):Cal是委托;

Cal c = new Cal((a, b) => { return a + b; });

如果沒有參數(shù):

Cal c = new Cal(() => { return 123; });

Cal c = new Cal((a, b) => { return a + b; });

IAsyncResult result = c.BeginInvoke(1, 2, null, null);

//阻塞線程;

int cc = c.EndInvoke(result);

??????????????? Console.WriteLine(cc);

??????????? Console.Read();

----cc為返回結(jié)果;

------------------------------------第二種通過線程池來創(chuàng)建:

----------lock鎖:lock內(nèi)的變量是引用類型;操作公共資源時(shí)只讓一個(gè)線程來操作,進(jìn)行線程隔離和線程的同步(無論哪個(gè)線程訪問都是的結(jié)果,比如+1操作);比如一個(gè)數(shù)組,否則會(huì)出

?

現(xiàn)超出索引;

lock()--:其實(shí)內(nèi)部為monitor

{

?

}

---創(chuàng)建一個(gè)實(shí)例,會(huì)在一個(gè)應(yīng)用程序域創(chuàng)建(類空間、同步索引快(默認(rèn)為-1,類型指針(指向該實(shí)例的類型));

提到對(duì)象池,就應(yīng)該想到lock;

---以后調(diào)用線程的時(shí)候就用線程池;guo方法是object類型;這樣比穿件Thread簡(jiǎn)單多了;

?? //線程池:ThreadPool.QueueUserWorkItem(new WaitCallbac(guo), "");

---線程池原理,將任務(wù)加載到隊(duì)列排隊(duì),在進(jìn)入到本地隊(duì)列讓cpu執(zhí)行;

?? {

?? ThreadPool.QueueUserWorkItem(new WaitCallback(guo), "");

??????????? Console.Write("主線程");

??????????? Console.Read();

??????? }

??????? public static void guo(object i)

??????? {

??????????? Thread.Sleep(3000);

??????????? Console.WriteLine("sfsdf");

??????? }

---死鎖:相互等待對(duì)方釋放資源;

---委托如果是無參,有返回值,那么匿名函數(shù),應(yīng)該為 ()=>{};;

--------3.使用task任務(wù);

????????? Task<string> ta = new Task<string>(() => {

??????????????? System.Threading.Thread.Sleep(2000);

??????????????? Console.WriteLine("sfsf");

??????????????? return "";

??????????? });

??????????? ta.Start();

??????????? Console.Write("主線程");

??????????? Console.Read();

--

--task任務(wù),可以使用 ta.Wait();來阻塞主線程,讓子線程執(zhí)行完,在執(zhí)行;

--Thread t = new Thread(() => { });

? t.Join();//相當(dāng)于ta.Wait();

c#多線程隨記回顧


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦?。?!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 九九视频这里只有精品 | 麻豆成人精品国产免费 | 简单视频在线播放jdav | 亚洲精品中文字幕久久久久久 | 亚洲欧美国产毛片在线 | 亚洲综合激情六月婷婷在线观看 | 亚洲天堂三区 | 很黄的网站在线观看 | 天天看天天干 | 国产精品99精品久久免费 | 182午夜在线观看 | 高清成人综合 | 亚洲激情一区 | 亚洲欧美在线综合一区二区三区 | 四虎最新永久免费视频 | 国产精品毛片天天看片 | 国产成社区在线视频观看 | 日本一区二区三区高清在线观看 | 插插插色综合 | 伊人这里只有精品 | 老子影院午夜久久亚洲 | 久操热| 日韩中文字幕精品视频在线 | 四虎免费永久观看 | 国产成人91精品 | 免费中文字幕一级毛片 | 伊人久久网国产伊人 | 天天碰免费视频 | 欧美香蕉网 | 国产精品久久久久久久久鸭 | 在线看日韩 | 九九久久久久午夜精选 | 美女被cao的视频免费看 | 国产午夜影院 | 羞羞的视频在线免费观看 | 日韩欧美视频在线一区二区 | 成人a一级毛片免费看 | 伊人五月天综合 | 亚洲最新视频在线观看 | 欧美日本一二三区 | 九九影音 |