.Net 多線程小結

1.簡述

  通常一個程序一個進程,代碼是存在進程中的,進程自己不執行代碼,  執行代碼的是線程。併發

  通常一個進程裏就一個線程。(一個商店就一個老闆娘。)this

  進程就是在內存中開闢了一個空間。代碼,圖片。。等就存在這個空間裏。代碼線程去執行。spa

  默認只有一個線程。線程

systerm.threading  //線程操做的類在這個命名空間下。

 

2.前臺線程與後臺線程。

  開啓一個線程,就是建立一個線程對象便可。3d

  線程默認狀況下都是前臺線程。調試

  要把全部的前臺線程執行完後,程序纔會退出。code

  進程裏默認的線程叫主線程或者默認線程,或UI線程。對象

  後臺線程,只要全部的前臺線程結束,全部的後臺線程就直接結束。blog

Thread th = new Thread(Sum); th.Name ="線程1"; 給線程取名。調試的時候能夠在輸出中看到具體名稱。 th.IsBackground = true; th.Start(); th.Abort(); 強行終止線程。 Thread.Sleep(1000); 暫停線程,單位是毫秒 Thread cuTh = Thread.CurrentThread 獲得當前線程的引用。Thread類型。 TextBox.CheckForIllegalCrossThreadCalls = false; //關閉空間的跨線程訪問檢查。 不然會出現以下錯誤
 

3.線程重入 

  同一個進程中的多個線程之間能夠「併發」執行。進程

  多個線程訪問同一資源, 可能形成不一樣步的狀況,這個叫作線程重入。

  應對此狀況,可加鎖處理。

private void CountNum()
        {
            lock (this)
            {
                for (int i = 0; i < 10000; i++)
                {
                    int num = int.Parse(textBox1.Text.Trim());
                    num++;
                    textBox1.Text = num.ToString();
                }
            }
        }

 

4.線程對象本質(委託)

 4.1 無參方法

  
 
  須要傳一個委託對象。
 ThreadStart ts = new ThreadStart(CountNum); Thread th = new Thread(ts); 等價於 Thread th = new Thread(CountNum); 本質傳的是一個委託對象。 (CountNum是無參方法)

   4.2 有參方法

  若是須要傳有參方法。

  則是建立的ParameterizedThreadStart 的委託對象。

  傳參是在Start方法中傳入;start方法有兩個重載。

 

相關文章
相關標籤/搜索