<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        .NET Windows 多線程thread編程

        來源:懂視網 責編:小采 時間:2020-11-27 22:42:11
        文檔

        .NET Windows 多線程thread編程

        .NET Windows 多線程thread編程:進程:工廠搬磚頭,10個工人搬完1000個磚頭 線程:每個工人,搬完100個磚頭,就是一個任務 采用線程,異步搬: 手工去搬,10個工人同時搬,效率高,異步執行,如果不采用線程,等第一個人搬完后第二個人才搬,那就慢了什么時候不能用線程: 如果要用小車來搬,
        推薦度:
        導讀.NET Windows 多線程thread編程:進程:工廠搬磚頭,10個工人搬完1000個磚頭 線程:每個工人,搬完100個磚頭,就是一個任務 采用線程,異步搬: 手工去搬,10個工人同時搬,效率高,異步執行,如果不采用線程,等第一個人搬完后第二個人才搬,那就慢了什么時候不能用線程: 如果要用小車來搬,

        進程:工廠搬磚頭,10個工人搬完1000個磚頭
        線程:每個工人,搬完100個磚頭,就是一個任務
        采用線程,異步搬:
        手工去搬,10個工人同時搬,效率高,異步執行,如果不采用線程,等第一個人搬完后第二個人才搬,那就慢了

        什么時候不能用線程:
        如果要用小車來搬,只有一個小車,那么,在這樣的情況下,就不應該用線程,因為只有一個小車,各個線程都在爭奪和等待這個小車,所以不能用線程。如果這個時候還要用線程,則導致資源浪費,
        因為每個線程都有自己的資源,如包工頭(CPU)同一時間要管理這10個工人,而只有一個工人實際在做事。
        線程的銷毀:在銷毀的時候需要考慮一些問題,比如搬磚頭時,你不可能在一個工人搬到一半的時候,你將他銷毀,那磚頭往哪放呢?

        1..net里使用線程
        .net里使用線程,用thread類,定義線程,啟動,銷毀,全部包括在這個類里定義一個線程,必須指定這個線程的函數,也就是這個線程是做什么的,搬磚頭呢還是挑水
        EG:
        代碼如下:


        Thread t = new Thread( new ThreadStart( st.WorkerMethod ) );
        t.Start ();
        public void WorkerMethod()
        {
        Console.WriteLine ("AA ");
        }

        2.如果使用帶有參數的線程
        線程本身是不能帶參數的,只能在類里定義一個全局變量,線程前先給這個變量賦值,然后在線程的函數里,去使用這個變量,以達到傳參數的目的
        EG:
        代碼如下:

        public class SimpleThread
        {
        private string procParameter = "";
        public SimpleThread (string strPara)
        {
        procParameter = strPara;
        }
        public void WorkerMethod()
        {
        Console.WriteLine ("參數輸入為: " + procParameter);
        }
        }
        class MainClass
        {
        /// <summary>
        /// 應用程序的主入口點。
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
        SimpleThread st = new SimpleThread("這是參數字符串!");
        Thread t = new Thread( new ThreadStart( st.WorkerMethod ) );
        t.Start ();
        t.Join (Timeout.Infinite);
        }
        }

        3.線程和委托
        委托的目的:類似C++的指鐘,就是要把函數當做參數來傳遞
        4.應用程序域
        10個工人各自搬各自的,隔離開,不相互受影響,一個人抱怨不搬了,不影響其他人,電腦里也是一樣的情況,各個應用程序間不能干擾,程序間不能訪問,并且一個程序死了,整個電腦部能死機。
        5.線程池
        就如內存,如果工人搬磚頭,突然有2個工人因為什么原因不能搬了,那么從線程池里調用其他線程來做,性能好,創建一個線程需要浪費時間和資源
        6.異步調用
        調用WebService為例
        同步:調用一個WebService時,調用完了,才執行下面的代碼,如果在調用的時候,阻塞了,那么就要等待很久
        異步調用:調用WebService,代碼繼續往下執行,WebService執行完了后,再傳回到接收器對象。
        7.多線程的應用,利用線程排序
        排序1000個數,如果一個線程排,需要1000毫秒
        如果10個線程排,則只需要大概100毫秒
        當然,排序的時候a[i] a[i+1],同時只能有一個線程對他進行操作
        所以,在For里面,i和i+1交換的時候,需要事先進行鎖定。
        代碼如下:

        for (int t = 0; t < x; t++)//X為線程數
        {
        Thread thread = new Thread(new ThreadStart(Sort));//Sort排序的方法
        thread.Name = Convert.ToString(t);
        thread.Start();
        }
        public void Sort()
        {
        try
        {
        while (true)
        {
        swaped = false;
        for (int j = 0; j < valueArray.Length - 1; j++)
        {
        lock (typeof(Thread))//鎖定
        {
        if (valueArray[j] > valueArray[j + 1])
        {
        int T = valueArray[j];
        valueArray[j] = valueArray[j + 1];
        valueArray[j + 1] = T;
        swaped = true;
        }
        }
        }
        Thread.Sleep(1);
        if (!swaped) { break; }
        }
        Thread.CurrentThread.Abort();
        }
        catch (Exception ex)
        {
        if (Interlocked.Increment(ref threadCounter) == Convert.ToInt64(ddlThreadNum.SelectedItem.ToString().ToString().Trim()))
        Display();
        }
        }

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        .NET Windows 多線程thread編程

        .NET Windows 多線程thread編程:進程:工廠搬磚頭,10個工人搬完1000個磚頭 線程:每個工人,搬完100個磚頭,就是一個任務 采用線程,異步搬: 手工去搬,10個工人同時搬,效率高,異步執行,如果不采用線程,等第一個人搬完后第二個人才搬,那就慢了什么時候不能用線程: 如果要用小車來搬,
        推薦度:
        標簽: Windows net 編程
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲精品无码专区在线| 青娱乐在线免费观看视频| 亚洲人成电影亚洲人成9999网| 亚洲国产高清视频| a级在线免费观看| 国外成人免费高清激情视频| 久久久青草青青国产亚洲免观| 亚洲伊人tv综合网色| 国产精品亚洲专区在线播放 | 看全免费的一级毛片| 国产传媒在线观看视频免费观看| 久久久无码精品亚洲日韩按摩| 久久国产乱子伦精品免费不卡 | 免费人成激情视频| 亚洲视频日韩视频| 免费无码AV一区二区| 免费阿v网站在线观看g| 亚洲精品成a人在线观看| 亚洲国产精品日韩在线观看| 四虎国产精品成人免费久久| 久久久久国产精品免费免费搜索| 狠狠亚洲婷婷综合色香五月排名| 亚洲一本之道高清乱码| 一区二区三区免费电影| 午夜精品在线免费观看| 国产精品久久久久久亚洲影视| 午夜免费1000部| 亚洲第一页日韩专区| 亚洲专区一路线二| 韩国欧洲一级毛片免费| 亚洲天堂一区二区三区| 麻豆国产精品入口免费观看| 一级特级aaaa毛片免费观看| 亚洲AV无码码潮喷在线观看| 久久九九免费高清视频| 亚洲国产综合人成综合网站| 成人影片一区免费观看| 亚洲av无码乱码国产精品| 精品久久久久成人码免费动漫| 欧洲亚洲综合一区二区三区| 国产午夜亚洲精品理论片不卡|