线程是什么?
线程(Thread)是进程中的一个基本执行单元,是操作系统分配CPU时间的基本单位,一个进程可以包含若干个线程,在进程入口执行的第一个线程被视为这个进程的主线程。在.NET应用程序中,都是以Main()方法作为入口的,当调用此方法时系统就会自动创建一个主线程。线程主要是由CPU寄存器、调用栈和线程本地储存器(Thread Local Storage,TLS)组成的。CPU寄存器主要记录当前所执行线程的状态,调用栈主要用于维护贤臣所调用到的内存与数据,TLS主要用于存放线程的状态信息。
实例:UI假死
多线程的优点:
- 可以同时完成多个任务;
- 可以是程序的响应速度更快;
- 可以让占用大量处理时间的任务或当前没有进行处理的任务定期将处理时间让给别的任务;
- 可以随时停止任务;
- 可以设置没格任务的优先级以优化程序性能
Thread常用的属性与方法
- CurrentThread 获取当前的线程
- ManagedThreadID 获取当前托管线程的唯一标识符
- Priority 获取或设置一个值,该值知识线程的调度优先级
当线程之间争夺CPU时间时,CPU按照的优先级给与服务。高优先级的线程可以完全阻止低优先级的线程执行。.NET为线程设置了Priority属性来定义线程执行的优先级别,里面包含5个选项,其中Normal是默认值。除非系统有特殊要求,否则不应该随便设置线程的优先级别
线程优先级有5种,从低到高分别是:Lowest BelowNormal Normal AboveNormal Highest
ThreadState 获取一个值,该值包含当前线程的状态。
通过ThreadState可以检测线程是处于UNstarted、Sleeping、Running
- Start() 执行本线程
- Sleep() 把正在运行的线程挂起一段时间,简单来说就是休眠一段时间。
- Abort() 终止本线程
前台线程和后台线程
前台线程:只有所有前台线程都结束,应用程序才能结束。默认情况下的线程都是前台线程
后台线程:只要所有的前台线程结束,后台线程自动结束。通过Thread.IsBackground设置后台线程。必须在调用Start方法之前设置线程的类型,否则一旦线程运行,将无法改变其类型
线程同步
所谓同步:是指在某一 时刻只有一个线程可以访问变量。
如果不能确保对变量的访问时同步的,就会产生错误。
//创建线程
Thread =>委托
Thread t = new Thread(new ThreadStart(方法名));
//将线程转换为后台线程
t.IsBackground = true;
//启动线程
t.Start();