C#多線程+委托+匿名方法+Lambda表達式


 

線程

下面是百度寫的:

定義
英文:Thread
每個正在系統上運行的程序都是一個進程。每個進程包含一到多個線程。進程也可能是整個程序或者是部分程序的動態執行。線程是一組指令的集合,或者是程序的特殊段,它可以在程序里獨立執行。也可以把它理解為代碼運行的上下文。所以線程基本上是輕量級的進程,它負責在單個程序里執行多任務。通常由操作系統負責多個線程的調度和執行。
線程是程序中一個單一的順序控制流程.在單個程序中同時運行多個線程完成不同的工作,稱為多線程。

 

 

學習多線程之前,先復習一下什么叫委托。

  delegate int calculator(int a, int b);//委托類型
        static void Main(string[] args)
        {
            calculator Num = new calculator(add);
            
            Console.WriteLine(Num(1, 2));
        }

        private static int add(int a, int b)
        {
            return a + b;
        }

代碼有點長,我們來想辦法讓代碼短一點,巴啦啦能量,代碼變短:

 delegate int calculator(int a, int b);//委托類型
        static void Main(string[] args)
        {
            calculator Num = delegate (int a, int b)
            {
                return a + b;
            };
            Console.WriteLine(Num(1, 2));
     }

變短了一行,這個就叫做匿名方法。那還能不能簡短一點嗎?

 delegate int calculator(int x, int y); //委托類型
    class Program3
    {
        static void Main()
        {
            calculator sum = (x, y) => x + y;//Lambda表達式
            Console.WriteLine(sum(1,2));
        }
    }

代碼是不是簡潔了點了呢? 好,接下來我們回到正題多線程編程,這里感謝一下萬年鋒刀志給我寫了一個多線程的Demo讓我學習

   Thread theader = new Thread(new ThreadStart(new Action(() =>
            {
                Thread.Sleep(2000);
                Console.WriteLine("我是新建的子線程.....");
            })));
            theader.Start();

            Console.WriteLine("我是主線程......");

            Console.ReadKey();

我們F12看下Thread有哪些用法,我們這里的案例使用了第一個方法

然后再看看為什么可以直接new ThreadStart呢?

原來 它是一個委托方法。

案例后面的new Action  也是一個原生的委托方法,作用是封裝一個方法,該方法不具有參數並且不返回值。

 然后講講這個簡單的Demo,一個Thread實例表示一個線程,每個程序都有一個主線程。我在這里新建了一個子線程,並讓它睡了2秒。

就會出現第二句話延遲2秒出現。

 

這就涉及到了Thread的常用方法,下面就講幾個方法吧,

start();//啟動線程

suspend();//掛起調用線程

resume();//恢復掛起線程

getId();//獲得線程ID

getName();//獲得線程名字

isAlive();//判斷線程是否活動

isDaemon();//判斷是否守護線程

getState();//獲得線程狀態

sleep(long mill);//休眠線程

join();//等待線程結束

about();//引發一個ThreadAbortException異常

resetAbout();取消異常終止

interrupt();//中斷線程

currentThread();//獲得正在執行的線程對象

所有方法可以把鼠標光標點到Demo的Sleep上,按下F12都可以查看哦。

 

整個項目的DEMO在這里

再分享一篇深入理解的文章,點擊這里


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM