多线程
程序同时完成多件事情,就是所谓的多线程程序,提高程序的性能和运行速度
并发
同时进行的活动,在C#中被称为并发
一个进程包含多个线程
多线程的优点
可以尽可能的对用户的操作做出反应,以便提高良好的用户体验,
缺点:
1.创建进程和线程的数目会受到可用内存的限制
2.跟踪大量的线程,将占用大量的处理器时间,如果线程过多,不会产生很明显的进度,
3.如果大多数的线程在一个进程中,其他进程中的调度频率就会很低
4.多线程控制代码,代码更复杂,逻辑冲突,可能产生bug
5.销毁线程需要了解可能发生的问题,并处理
CheckForIllegalCrossThreadCalls设置为false
新创建的线程不能访问UI线程创建的窗口控件,这时如果想要访问窗口的控件可将窗口构造函数中的CheckForIllegalCrossThreadCalls设置为false;然后就能安全的访问窗体控件
程序初始化时设置这个属性,再使用微软Framework类库中的控件,系统将不会再抛出你线程的异常信息。
线程的实现
C#中使用Thread类实现线程
1.使用Thread类创建线程
线程的休眠,sleep
加入线程:Join,
终止线程:abort
priority设置线程优先级
线程同步
防止线程之间的资源冲突,如抢票全部抢完
1.使用lock关键字,实现线程同步,用来保证代码块运行完成,不会被其他线程中断,它是通过在代码块运行期间为给定对象获取互斥锁来实现的。lock(this){}
2.使用Monitor类,实现线程同步。Monitor类提供了同步对对象访问机制,,它通过向单个线程授予对象锁,来控制对对象的访问,,对象锁提供限制访问代码块(通常为临界区)的能力,当一个对象拥有对象锁时,其他任何线程都不能获取该锁。
Monitor.Enter(this)锁定代码块
Monitor.Exit(this)解锁代码块
3.使用Mutex实现线程同步,Mutex类和Monitor类相似,它防止多个线程,在某一时间同时执行某个代码块,不同的是,Mutex可以用来跨线程的线程同步
4.线程池