国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

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

多線程重點(diǎn)知識(shí)總結(jié)

2019-11-17 03:16:26
字體:
供稿:網(wǎng)友

多線程重點(diǎn)知識(shí)總結(jié)

一、進(jìn)程/線程

進(jìn)程:系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位。(存資源)

線程:CPU調(diào)度和分派的基本單位。(執(zhí)行)

一個(gè)進(jìn)程可以有多個(gè)線程,一個(gè)線程可與同屬一個(gè)進(jìn)程的其他線程共享進(jìn)程所擁有的全部資源。

場(chǎng)景:超市。

 1  /// <summary> 2         /// 單線程 3         /// </summary> 4         /// <param name="sender"></param> 5         /// <param name="e"></param> 6         PRivate void button1_Click(object sender, EventArgs e) 7         { 8             //int sum = 0; 9             //for (int i = 1; i < 999999999; i++)10             //{11             //    sum += i;12             //}13             //MessageBox.Show(sum.ToString());//執(zhí)行完后,才能做別的操作14         }15 16         /// <summary>17         /// 多線程18         /// </summary>19         /// <param name="sender"></param>20         /// <param name="e"></param>21         private void button3_Click(object sender, EventArgs e)22         {23             Thread thread = new Thread(TestThread);24             thread.IsBackground = true;//設(shè)置為后臺(tái)線程25             thread.Start();26         }27 28         /// <summary>29         /// 準(zhǔn)備讓線程去調(diào)用30         /// </summary>31         private void TestThread()32         {33             int sum = 0;34             for (int i = 1; i < 999999999; i++)35             {36                 sum += i;37             }38             MessageBox.Show(sum.ToString());//執(zhí)行完后,才能做別的操作39         }
View Code

二、前臺(tái)線程/后臺(tái)線程

1、進(jìn)程里面默認(rèn)的線程叫做主線程(UI線程).

2、默認(rèn)情況下,線程都是前臺(tái)線程(所有的線程執(zhí)行完畢后,程序才退出),如要將設(shè)置成后臺(tái)線程(關(guān)閉窗口后,程序就結(jié)束),設(shè)置thead.IsBackground=true.

三、線程重入以及解決方法

1、demo2中textbox是由ui線程創(chuàng)建的,所以創(chuàng)建的線程是沒法調(diào)用的,所以一開始程序會(huì)報(bào)錯(cuò), 只需要關(guān)閉控件的跨線程訪問的檢查即可.

2、多個(gè)線程訪問同一個(gè)資源,可能造成不同步的情況,叫做線程重入。用lock(this) 處理,this表示當(dāng)前對(duì)象,只能一個(gè)線程執(zhí)行完后,才能執(zhí)行另外的線程

 1 public demo2() 2         { 3             InitializeComponent(); 4             TextBox.CheckForIllegalCrossThreadCalls = false;//關(guān)閉控件的跨線程訪問的檢查即可 5         } 6         Thread thread; 7         private void button1_Click(object sender, EventArgs e) 8         { 9             thread = new Thread(CountNum);10             thread.IsBackground = true;11             thread.Start();12 13             //Thread thread1 = new Thread(CountNum);14             //thread1.IsBackground = true;15             //thread1.Start();16         }17         private void CountNum()18         {19             lock (this)//this表示當(dāng)前對(duì)象,只能一個(gè)線程執(zhí)行完后,才能執(zhí)行另外的線程20             {21                 for (int i = 0; i < 10000; i++)22                 {23                     int num = Convert.ToInt32(textBox1.Text.Trim());24                     num++;25                     //Thread.Sleep(1000);26 27                     //if (num == 5000)28                     //{29                     //    thread.Abort();30                     //}31                     textBox1.Text = num.ToString();32                 }33             }34         }
View Code

四、線程的調(diào)度方式

1、非搶占式調(diào)度:某個(gè)線程在運(yùn)行時(shí)不會(huì)被操作系統(tǒng)強(qiáng)制暫停,運(yùn)行完后交出運(yùn)行權(quán)。一旦一個(gè)程序死了,那么整個(gè)電腦只能重啟了。

2、搶占式調(diào)度:每個(gè)線程都只有極少的運(yùn)行時(shí)間(在windows內(nèi)核模式下這個(gè)時(shí)間不會(huì)超過20ms),當(dāng)時(shí)間用完該線程會(huì)被強(qiáng)制暫停,保存上下文并把cpu運(yùn)行權(quán)交給下一個(gè)線程。

五、線程常用屬性方法

1、Abort方法:強(qiáng)行停掉線程。

2、Sleep(毫秒):將當(dāng)前線程暫停多少毫秒,靜態(tài)方法

六、抽獎(jiǎng)程序

 1 public demo3() 2         { 3             InitializeComponent(); 4             Label.CheckForIllegalCrossThreadCalls = false; 5         } 6         Thread thead; 7         private void button1_Click(object sender, EventArgs e) 8         { 9             if (button1.Text == "開始搖獎(jiǎng)")10             {11                 thead = new Thread(RunLuck);12                 thead.IsBackground = true;13                 thead.Start();14                 button1.Text = "停止搖獎(jiǎng)";15             }16             else17             {18                 thead.Abort();19                 button1.Text = "開始搖獎(jiǎng)";20             }21         }22         Random r = new Random();23         public void RunLuck()24         {25             while (true)26             {27                 Thread.Sleep(100);28                 foreach (Control c in groupBox1.Controls)29                 {30                     Label lab = c as Label;31                     if (lab != null)32                     {33                         lab.Text = r.Next(0, 10).ToString();34                     }35                 }36             }37         }
View Code

七、線程調(diào)用帶參數(shù)的方法

 1  public demo4() 2         { 3             InitializeComponent(); 4         } 5         private void button1_Click(object sender, EventArgs e) 6         { 7             ParameterizedThreadStart s = new ParameterizedThreadStart(TestThreadParsms); 8             Thread t = new Thread(s); 9             t.IsBackground = true;10             t.Start("你好哇");11         }12         public void TestThreadParsms(object obj)//此處只能傳object類型參數(shù),和委托參數(shù)一致,如想傳多個(gè)參數(shù),弄成一個(gè)數(shù)組即可13         {14             MessageBox.Show(obj.ToString());15         }
View Code

------------------------------------------------------------------------------------------------------------------------------------------

軟謀在線教育,最適合大學(xué)生、上班族的在線軟件培訓(xùn),主要教授asp.net動(dòng)態(tài)網(wǎng)站制作,yy教育房間遠(yuǎn)程實(shí)時(shí)授課,每節(jié)課錄制成高清視頻課后分享,老師白天八小時(shí)全職在線輔導(dǎo),不懂就問。加QQ群:138800420 即可免費(fèi)試聽。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 都匀市| 定边县| 庆阳市| 德钦县| 宣武区| 济源市| 台东县| 莫力| 凤山市| 扬州市| 神木县| 石林| 同德县| 石狮市| 铜山县| 黎城县| 河曲县| 英德市| 双辽市| 蓬安县| 锦州市| 大余县| 宣化县| 离岛区| 且末县| 攀枝花市| 太和县| 融水| 沐川县| 峨眉山市| 辽源市| 延庆县| 尉犁县| 富宁县| 黎平县| 舟山市| 镇远县| 陇西县| 定兴县| 永吉县| 景谷|