基础拾遗----多线程

基础拾遗------特性详解

基础拾遗------webservice详解

基础拾遗------redis详解

基础拾遗------反射详解

基础拾遗------委托、事件详解

基础拾遗------接口详解

基础拾遗------泛型详解

基础拾遗-----依赖注入

基础拾遗-----数据注解与验证

基础拾遗-----mongoDB操作

基础拾遗----RabbitMQ

基础拾遗---CLR

前言

我们知道c# 程序是自上而下的,但有的时候部分程序使用时间较长比如下载文档什么的。这是就可以用到线程。线程可以理解为是程序的执行路径,每个线程都定义了一个独特的控制流。如果您的应用程序涉及到复杂的和耗时的操作,那么设置不同的线程执行路径往往是有益的,每个线程执行特定的工作。

1.线程的生命周期

线程生命周期开始于 System.Threading.Thread 类的对象被创建时,结束于线程被终止或完成执行时。

下面列出了线程生命周期中的各种状态:

未启动状态:当线程实例被创建但 Start 方法未被调用时的状况。

就绪状态:当线程准备好运行并等待 CPU 周期时的状况。

不可运行状态:下面的几种情况下线程是不可运行的:

  已经调用 Sleep 方法

  已经调用 Wait 方法

  通过 I/O 操作阻塞

死亡状态:当线程已完成执行或已中止时的状况。

2.多线程的优缺点 2.1.优点

可以使用线程将代码同其他代码隔离,提高应用程序的可靠性。

可以使用线程来简化编码。

可以使用线程来实现并发执行。

可以提高CPU的利用率

2.2.缺点

线程开的越多,内存占用越大。

协调和管理代码的难度加大,需要CPU时间跟踪线程。

线程之间对共享资源的访问会相互影响,必须解决竞用共享资源的问题。

销毁线程需要了解可能发生的问题并对那些问题进行处理。

3.线程的实现 3.1.异步委托

关于委托基础拾遗------委托、事件详解这有详细介绍,我们都知道调用委托Delegate()或者Delegate?.Invoke()。进行执行,但是主线程的代码是从上至下进行执行的,那么我们想要委托方法进行一个新的线程只需BeginInvoke生成异步方法调用即可。

3.3.1.实现

public delegate void ThreadDelegate(); static void MethodDelegata() { Console.WriteLine("MethodDelegata"); } static void Main(string[] args) { ThreadDelegate d = MethodDelegata; //BeginInvoke 两个参数一个是执行完后回调方法,一个是返回结果,如委托有参数载气前方添加即可。 d.BeginInvoke(null,null); Console.WriteLine("Main"); Console.ReadKey(); }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpzfgx.html