zoukankan      html  css  js  c++  java
  • 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在这里

    再分享一篇深入理解的文章,点击这里

  • 相关阅读:
    从程序员到项目经理(1)
    从程序员到项目经理(26):项目管理不能浑水摸鱼
    职场“常青树”越老越值钱
    阿里巴巴离职DBA 35岁总结的职业生涯
    CEPH RGW多 ZONE的配置
    CEPH 对象存储的系统池介绍
    Windows 下配置 Vagrant 环境
    vagrant 创建虚拟机时遇到问题
    浅谈Ceph纠删码
    磁盘缓存
  • 原文地址:https://www.cnblogs.com/xuxml/p/8493790.html
Copyright © 2011-2022 走看看