C#编程中多线程处理实例.docx

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
多线程定义多线程就是使程序并发(同时)执行几个操作。.NET 框架类库在System.Threading 中加入了多线程的能力。因此要在前面加入引用 using System.ThreadingThread 类:创建并控制线程,设置其优先级并获取其状态。Thread 类的构造方法,主要有2种:(1)Thread thread_name=Thread(ThreadStart):ThreadStart 委托,它表示此线程开始执行时要调用的方法。适用于无参数的方法。(2)Thread thread_name=Thread(ParameterizedThreadStart):ParameterizedThreadStart 委托,它表示此线程开始执行时要调用的方法。适用于有参数传入的方法。一个普通的无参线程操作//定义一个线程,参数是一个方法,无返回值,采用的是委托Thread td = new Thread(xunhuan);//前台线程,所有的线程都执行完了,应用程序才退出,默认的都是前台线程//后台线程,所有的前台线程都执行完了,就退出,不管后台的线程td.IsBackground = true; //设定为后台线程td.Start();//启动线程//定义一个线程,参数是一个方法,无返回值,采用的是委托Thread td = new Thread(xunhuan);//前台线程,所有的线程都执行完了,应用程序才退出,默认的都是前台线程//后台线程,所有的前台线程都执行完了,就退出,不管后台的线程td.IsBackground = true; //设定为后台线程td.Start();//启动线程一个普通的有参线程操作//定义线程,传入的带参数的方法。Thread ptd = new Thread(showname);ptd.IsBackground = true;//重载Start方法,传递个参数ptd.Start(lilei);有参的方法定义,参数objec类型//线程调用,带多个参数static void shownames(object names){?List list = names as List;?foreach (string name in list)?{?????MessageBox.Show(name);?}?}线程状态任何时候,线程都要处于某种线程状态中。新线程在Unstarted状态中开始它的生命周期。在调用Thread类的Start方法之前,会一直保持在Unstarted状态,调用方法之后,就会进入Started状态,并立即将程序的控制权返回调用程序(点了线程调用后,可以立即去干别的事)。然后,调用了Start方法的线程(也就是Started线程)和程序中其他的线程并发执行。线程优先级每个线程都有个优先级,其范围在ThreadPriority.Lowest和ThreadPriority.Highest之间。默认情况下,每个线程的优先级都是Normal。Windows操作系统支持时间分片(timeslicing)的概念,它的思路是优先级相同的线程共享一个处理器。线程的同步和类监视器通常,多个执行线程要操作共享数据。如果有权访问共享数据的线程只能读取数据,那就不需要阻止多个线程同时访问共享数据。然而,当多个线程共享数据,并且其中一个或多个线程要修改数据时,可能会出现无法预知的结果。如果一个线程正在更新数据,另一个线程也试图更新,那么数据所反映的就第二次更新操作之后的结果。所以可通过一次只允许一个线程访问用于操作共享数据的代码来解决。其他想要操作数据的线程应该等待。具有排他访问权的线程完成对数据的操作后,等待操作线程的数据可以继续执行。这称为互斥或线程同步。C#提供了两中解决技术:(1)Monitor类:主要方法(方法传入的参数为objec对象,一般为当前调用的线程):Monitor.Enter():获取排他锁。Monitor.Wait():释放对象上的锁并阻止当前线程,直到重新获取该锁。Monitor.Pulse():通知等待队列中的线程对象状态的改变。Monitor.Exit():释放排他锁。(2)lock关键字:在对象前加个lock代码示例Monitor的用法public class mt{private int age;//buff判断内容是否已被更新或提取,0为未更新,1为已更新private int buff = 0;int Age{get{Monitor.Enter(this);//获取此对象的排他锁if (buff == 0)//若内容为空或未更新就使此线程等待{MessageBox.Show(内容为空或未更新);Monitor.Wait(this);//释放锁并等待}buff--;Mess

文档评论(0)

kehan123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档