基础拾遗------特性详解
基础拾遗------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(); }