第十七章 线程.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第十七章 线程

第17章 线 程 第18章 多线程 17.1 线程 17.2 应用线程 17.2.1 Thread类 Thread类位于命名空间System.Threading中,被用来创建新的线程。Thread类被声明为sealed,无法被继承。 C#应用程序本身的线程为主线程,编程者可通过Thread所提供的静态属性成员: CurrentThread获取当前的线程个体; Name获取设定线程的名称。 public static Thread CurrentThread { get; } public string Name { get; set; } //可读写 P369例17.1所示。 17.2.2 创建线程 Thread类的构造方法为: public Thread(ThreadStart startPoint) startPoint参数是一个ThreadStart代理,代表该线程对象所要执行的方法。 ThreadStart代理的定义为: public delegate void ThreadStart(); 所以在一个新创建的线程对象中指定方法时,必须满足ThreadStart代理的形式,即不能有返回值,不能有输入参数。 创建完线程对象,定义所要执行的方法之后,接着必须使用Thread类的Start()方法,启动执行ThreadStart()代理的封装方法。这个新线程方法与主应用程序的主线程分开并同时进行。 注意:线程只有在ThreadStart代理的方法执行完后才会终止,一旦执行ThreadStart并完成后,下次无法再调用另一个Start()方法启动线程。 P371例17.2所示。输出奇数、偶数顺序进行。 P372例17.3所示。输出奇数、偶数交替进行。 17.2.3 暂停线程—Sleep()和Join() Thread类的Sleep()定义如下: public static void Sleep(int milliseconds) 暂停线程且暂停指定的时间长度。 注意:参数也可接受一个Timeout类的常数Infinite,表示无限期地暂停下去。 P374例17.4所示。 假若程序中存在着两个以上的线程,要求一个线程必须等待另一个线程完成自己的工作之后,才能继续执行。Thread类提供了Join()方法来实现这个工作。Join()封锁当前的线程,直到引用这个方法的线程完成之后,再进行当前线程未完成的工作。 Join()有几个重载版本: public void Join() //封锁调用该方法的线程 public bool Join(int milliseconds) //在指定的时间之后,启动暂停的线程 P376例17.5所示。 Thread类提供了Suspend()和Resume()方法,允许一个线程启动之后能够暂停执行,并且在需要的时候恢复其执行的操作。 17.3 线程状态 每一种线程的方法都会对自己或者别的线程运行状态造成影响。可以通过线程的属性ThreadState来获得线程的运行状态。线程命名空间为我们提供了一个叫做ThreadState的系统枚举(与线程的ThreadState属性重名),它包含线程的各种状态的定义。其成员为: Abouted:使线程处于Stopped状态 AboutRequested:已对线程调用了About方法后的挂起状态 Running:线程已启动,处于运行状态 Stoped:线程已停止 Unstarted:尚未对线程调用Thread.Start方法 WaitSleepJoin:由于调用Wait,Sleep,Join使线程已暂停 假设有两个线程A和B,我们来看看线程方法和状态之间的关系。可以看出线程从生成对象到最后中止一般会出现四种状态,按照先后顺序依次是Unstarted,Running,WaitSleepJoin和Stopped,其中WaitSleepJoin可出现也可不出现。 总之,精确了解线程的状态,可以更好地控制线程的行为。 17.3.1 判断线程的结束 IsAlive只读属性可以获取线程是否已经结束。 public bool IsAlive { get; } 当线程还在执行的时候,其值为true,否则为false。 P379例17.6所示。 17.3.2 取得线程状态 ThreadState只读属性可以精确地获取当前线程的状态。 public ThreadState { get; } 该属性返回一个枚举值(如下表)。 17.4 避免资源访问冲突 当一个应用程序中多个线程对同一份资源进行访问的时候,冲突就会发生,这时必须协调这些独立线程,这样的操作称为线程的同步化。

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档