C#Thread线程状态知识

更新时间:2023-05-17 11:12:35 阅读: 评论:0

C#Thread线程状态知识
基础类库的System.Threading命名空间提供了⼤量的类和接⼝⽀持多线程。这个命名空间有很多的类。System.Threading.Thread类是创建并控制线程,设置其优先级并获取其状态最为常⽤的类。他有很多的⽅法,在这⾥我们将就⽐较常⽤和重要的⽅法做⼀下介绍:
廉政手抄报Thread.Start():启动线程的执⾏;
老年病  Thread.Suspend():挂起线程,或者如果线程已挂起,则不起作⽤;
  Thread.Resume():继续已挂起的线程;
  Thread.Interrupt():中⽌处于 Wait或者Sleep或者Join 线程状态的线程;
取消关机命令  Thread.Join():阻塞调⽤线程,直到某个线程终⽌时为⽌
  Thread.Sleep():将当前线程阻塞指定的毫秒数;
  Thread.Abort():以开始终⽌此线程的过程。如果线程已经在终⽌,则不能通过Thread.Start()来启动线程。
邓梦婷
通过调⽤Thread.Sleep,Thread.Suspend或者Thread.Join可以暂停/阻塞线程。调⽤Sleep()和Suspend()⽅法意味着线程将不再得到CPU 时间。这两种暂停线程的⽅法是有区别的,Sleep()使得线程⽴即停⽌执⾏,但是在调⽤Suspend()⽅法之前,公共语⾔运⾏时必须到达⼀个安全点。⼀个线程不能对另外⼀个线程调⽤Sleep()⽅法,但是可以调⽤Suspend()⽅法使得另外⼀个线程暂停执⾏。对已经挂起的线程调
⽤Thread.Resume()⽅法会使其继续执⾏。不管使⽤多少次Suspend()⽅法来阻塞⼀个线程,只需⼀次调⽤Resume()⽅法就可以使得线程继续执⾏。已经终⽌的和还没有开始执⾏的线程都不能使⽤挂起。Thread.Sleep(int x)使线程阻塞x毫秒。只有当该线程是被其他的线程通过调⽤Thread.Interrupt()或者Thread.Abort()⽅法,才能被唤醒。如果对处于阻塞状态的线程调⽤Thread.Interrupt()⽅法将使线程状态改变,但是会抛出ThreadInterupptedException异常,你可以捕获这个异常并且做出处理,也可以忽略这个异常⽽让运⾏时终⽌线程。在⼀定的等待时间之内,Thread.Interrupt()和Thread.Abort()都可以⽴即唤醒⼀个线程。
我们可以通过使⽤Thread.Abort()⽅法来永久销毁⼀个线程,⽽且将抛出ThreadAbortException异常。使终结的线程可以捕获到异常但是很难控制恢复,仅有的办法是调⽤Thread.RetAbort()来取消刚才的调⽤,⽽且只有当这个异常是由于被调⽤线程引起的异常。对于A 和B两个线程,A线程可以正确的使⽤Thread.Abort()⽅法作⽤于B线程,但是B线程却不能调⽤Thread.RetAbort()来取
消Thread.Abort()操作。曾参简介
Thread.Abort()⽅法使得系统悄悄的销毁了线程⽽且不通知⽤户。⼀旦实施Thread.Abort()操作,该线程不能被重新启动。调⽤了这个⽅法并不是意味着线程⽴即销毁,因此为了确定线程是否被销毁,我们可以调⽤Thread.Join()来确定其销毁,Thread.Join()是⼀个阻塞调⽤,直到线程的确是终⽌了才返回。但是有可能⼀个线程调⽤Thread.Interrupt()⽅法来中⽌另外⼀个线程,⽽这个线程正在等
苹果7截图怎么截待Thread.Join()调⽤的返回。
尽可能的不要⽤Suspend()⽅法来挂起阻塞线程,因为这样很容易造成死锁。假设你挂起了⼀个线程,⽽这个线程的资源是其他线程所需要的,会发⽣什么后果。因此,我们尽可能的给重要性不同的线程以不同的优先级,⽤Thread.Priority()⽅法来代替使
唇干是什么原因引起的⽤Thread.Suspend()⽅法。
Thread类有很多的属性,这些重要的属性是我们多线程编程必须得掌握的。
广东财经大学
  Thread.IsAlive属性:获取⼀个值,该值指⽰当前线程的执⾏状态。如果此线程已启动并且尚未正常终⽌或中⽌,则为 true;否则
为 fal。
  Thread.Name 属性:获取或设置线程的名称。
  Thread.Priority 属性:获取或设置⼀个值,该值指⽰线程的调度优先级。
  Thread.ThreadState 属性:获取⼀个值,该值包含当前线程的状态。
Thread状态
  System.Threading.Thread.ThreadState属性定义了执⾏时线程的状态。线程从创建到线程终⽌,它⼀定处于其中某⼀个状态。当线程被创建时,它处在Unstarted状态,Thread类的Start() ⽅法将使线程状态变为Running状态,线程将⼀直处于这样的状态,除⾮我们调⽤了相应的⽅法使其挂起、阻塞、销毁或者⾃然终⽌。如果线程被挂起,它将处于Suspended状态,除⾮我们调⽤resume()⽅法使其重新执⾏,这时候线程将重新变为Running状态。⼀旦线程被销毁或者终⽌,线程处于Stopped状态。处于这个状态的线程将不复存在,正如线程开始启动,线程将不可能回到Unstarted状态。线程还有⼀个Background状态,它表明线程运⾏在前台还是后台。在⼀个确定的时间,线程可能处于多个状态。据例⼦来说,⼀个线程被调⽤了Sleep⽽处于阻塞,⽽接着另外⼀个线程调⽤Abort⽅法于这个阻塞的线程,这时候线程将同时处于WaitSleepJoin和AbortRequested状态。⼀旦线程响应转为Sle阻塞或者中⽌,当销毁时会抛出ThreadAbortException异常。
线程优先级
  System.Threading.Thread.Priority枚举了线程的优先级别,从⽽决定了线程能够得到多少CPU时间。⾼优先级的线程通常会⽐⼀般优先级的线程得到更多的CPU时间,如果不⽌⼀个⾼优先级的线程,操作系统将在这些线程之间循环分配CPU时间。低优先级的线程得到的CPU时间相对较少,当这⾥没有⾼优先级的线程,操作系统将挑选下⼀个低优先级的线程执⾏。⼀旦低优先级的线程在执⾏时遇到了⾼优先级的线程,它将让出CPU给⾼优先级的线程。新创建的线程优先级为⼀般优先级,我们可以设置线程的优先级别的值,如下⾯所⽰:
  Highest
  AboveNormal
  Normal
  BelowNormal

本文发布于:2023-05-17 11:12:35,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/666906.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:线程   状态   处于   销毁
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图