.net-----多线程编程技术
创始人
2024-02-17 08:42:15
0

多线程编程技术

  • 前言
  • 线程与创建多线程
    • 进程
    • 线程
    • 创建多线程应用程序
  • 线程状态和生命周期
    • 线程的生命周期的执行状态
  • 线程同步和通信
    • 使用lock语句同步代码块
    • 使用其他方法同步代码块
    • 同步事件和等待句柄
    • 使用Mutex同步代码块
  • 线程池
  • 定时器
  • 并行处理和异步处理

前言

线程与创建多线程

线程状态和生命周期

线程同步和通信

线程池

定时器

并行处理和异步处理

线程与创建多线程

进程

  • 操作系统中正在执行的不同应用程序的一个实例

线程

  • 操作系统分配处理器时间的基本单元

  • 维护异常处理程序、调度优先级和一组系统用于在调度该线程

  • 前保存线程上下文的结构

  • 操作系统和处理器

  • 线程处理使程序能够执行并发处理,因而特别适合需要同时执行多个操作的场合

  • 多线程处理可解决用户响应性能和多任务的问题,但同时引入了资源共享和同步问题等问题,占用资源和处理器调度实际大,影响运行性能

创建多线程应用程序

  • 应用程序运行时,创建新的应用程序域
  • 运行环境调用应用程序的入口点(Main方法)时,将创建应用程序主线程
static void Main(){Console.WriteLine("主线程:开始……");Thread.Sleep(5000); // 主线程睡眠5秒钟Console.WriteLine("主线程:结束!");Console.ReadKey();}
  • System.Threading命名空间提供支持多线程编程的类和接口

  • 创建新线程:

  • 创建一个将在主线程外执行的函数,即类的方法,用于执行新线程要执行的逻辑操作

  • 在主线程(Main方法)中创建一个Thread的实例,指向步骤1中的函数
    Thread newThread = new Thread(anObject.AMethod)

  • 调用步骤2中创建的Thread的实例的Start()方法,以启动新线程
    newThread.Start()

 static void Main(){Console.Write("Main线程开始。"); Thread t = new Thread(DoWork); //创建线程对象实例t.Start(); //启动工作线程for (int i = 0; i < 10; i++) { Console.Write("M"); Thread.Sleep(500); }Console.Write(" Main线程结束。"); Console.ReadKey();}public static void DoWork(){Console.Write("工作线程开始。");for (int i = 0; i < 10; i++) { Console.Write("W"); Thread.Sleep(500);}Console.Write(" 工作线程结束。");}

线程状态和生命周期

线程的生命周期的执行状态

Unstarted, Running, Suspended, Aborted, Stopped, ……

  • 通过执行相应的操作,线程可以转换为对应的状态

  • 创建新线程→Unstarted

  • 线程响应Suspend请求→ Suspended

  • 另一个线程调用Abort → AbortRequested

  • 线程被终止→ Stopped

  • 通过Thread对象实例的方法

  • 设置或获取线程属性
    t.name, t.Priority, t.IsBackground…

  • 操作线程
    t.Start() →启动
    t.Abort() →停止
    t.Suspend() →挂起
    t.Resume() →继续线程

  • 休眠(暂停)
    静态方法Thread.Sleep()和Thread.Sleep()强制当前正在执行的线程休眠

  • 线程让步
    Thread.Yield()

  • 线程加入
    t.Join(),让包含代码的线程(即当前线程)“加入”到另外一个线程的尾部

  • 线程中断
    Interrupt(),以在线程受到阻塞时抛出一个中断信号,这样线程就得以退出阻塞的状态

  • 线程终止/销毁
    Abort(),永久地停止托管线程

  • 前台线程和后台线程

  • 前台线程是通常意义的线程,从主线程进入,主线程中可以创建新的用户线程

  • 后台线程是一个服务线程,具有最低的优先级
    通过设置线程的IsBackground属性为true来设置后台线程

线程同步和通信

  • 线程优先级和线程调度

  • 在运行库内创建的线程最初被分配 Normal 优先级,通过线程的Priority属性可以获取和设置其优先级

  • 线程同步处理

  • 当多个线程可以调用单个对象的属性和方法

  • 一个线程可能会中断另一个线程正在执行的任务,使该对象处于一种无效状态

    • lock语句同步代码块,监视器同步代码块

使用lock语句同步代码块

  • lock关键字可以确保当一个线程位于代码的临界区时,另一个线程不会进入该临界区

  • lock语句以关键字lock开头,并以一个对象作为参数,在该参数的后面为线程互斥的代码块

private Object thisLock = new Object();
lock (thisLock)
{……
}

使用其他方法同步代码块

使用监视器(Monitor)
调用Monitor.Enter方法,允许一个且仅一个线程继续执行后面的语句;其他所有线程都将被阻止,直到执行语句的线程调用Exit

使用MethodImplAttribute特性实现方法同步处理

使用SynchronizationAttribute特性实现类同步处理

同步事件和等待句柄

  • 同步事件允许线程通过发信号互相通信,从而实现线程需要独占访问的资源的同步处理控制

  • 同步事件有两种:
    AutoResetEvent(自动重置的本地事件)
    ManualResetEvent(手动重置的本地事件)

  • 每种事件的两种状态:
    收到信号状态(signaled)
    未收到信号状态(unsignaled)

使用Mutex同步代码块

  • 与监视器类似,用于防止多个线程在某一时间同时执行某个代码块
  • 与监视器不同的是,mutex 可以用来使跨进程的线程同步

线程池

  • 可以用来在后台执行多个任务的线程集合,这使主线程可以自由地异步执行其他任务

  • 异步处理可不占用主线程,也不会延迟后续请求的处理

  • 通常用于服务器应用程序

  • 可使用ThreadPool类创建线程池

定时器

  • System.Threading.Timer是一种定时器工具,用来在一个后台线程计划执行指定任务

  • Timer提供以指定的时间间隔执行方法的机制

  • TimerCallback timerCB=new TimerCallback(PrintTime);

  • Timer timer1 = new Timer(timerCB,”timer1”,0,1000);

并行处理和异步处理

  • 并行处理

  • 基于Task Parallel Library(TPL,任务并行库),可以使多个独立的任务同时运行

  • 隐式创建和运行任务

  • 使用Parellel的静态方法Invoke

  • 显式创建和运行任务

  • 命名空间System.Threading.Tasks的Task类和Task类

  • 异步处理

  • 无须等待方法执行完毕,在执行异步方法的同时,可继续执行其他处理

  • 通过委托实现异步方法调用

  • async和await关键字

相关内容

热门资讯

解读中央经济工作会议精神⑥丨以... ■ 中国经济时报记者 王晶晶 2025年中央经济工作会议把“坚持对外开放,推动多领域合作共赢”确定为...
首次!澳门法律专业社团在内地设... 日前,澳门法律交流协进会广东代表处在横琴琴澳国际法务集聚区揭牌成立。这是澳门首个法律专业社团在内地设...
纠纷化解“只进一扇门” 近日,柯某某等一行11人来到芜湖市弋江区综治中心,反映辖区某项目拖欠工资问题。经初步了解,柯某某等人...
原创 海... 未查获现货但有证据证明的走私货物如何认定走私数额? 2021年10月起,钟某向陈某1、王某1(以上...
最高法:密切关注《检察公益诉讼... 12月22日,最高人民法院举行新闻发布会,发布第三批行政公益诉讼典型案例。 最高人民法院审判委员会委...
船营法院:破解金融纠纷 护航营... 今年以来,吉林市船营区人民法院立足辖区内市级金融机构密集、大额金融合同集中的地域特点,牢牢坚守“强制...
中国拟立法规定南极考察、旅游、... 中新网北京12月22日电 (记者 谢雁冰 郭超凯)南极活动与环境保护法草案22日提请十四届全国人大常...
信用修复!央行发布最新政策 22日,中国人民银行发布通知,实施一次性信用修复政策,支持信用受损但积极还款的个人高效便捷重塑信用。...
法规洞察 | 欧盟GMP无菌附... 污染控制策略(Contamination Control Strategy,CCS)是欧盟GMP无菌...
人大常委会丨拟写入法律!网络游... 新华社北京12月22日电(记者魏冠宇)十四届全国人大常委会第十九次会议12月22日继续审议国家通用语...