返回介绍

托管线程状态

发布于 2025-02-23 23:16:11 字数 1678 浏览 0 评论 0 收藏 0

属性 Thread.ThreadState 提供位掩码,用以指示线程的当前状态。 一个线程始终处于 ThreadState 枚举中的至少一个可能状态,并且可以同时处于多个状态。

重要

线程状态仅涉及几个调试方案。 因此,始终不应在代码中使用线程状态来同步线程活动。

创建托管线程时,该线程处于 Unstarted 状态。 线程会一直保持 Unstarted 状态,直到操作系统将其转移到已启动状态。 调用 Start 使操作系统知道该线程可启动;它不会更改线程的状态。

进入托管环境的非托管线程已处于已启动状态。 线程处于已启动状态后,可以执行许多操作来使线程更改状态。 下表列出了使状态发生更改的操作和相应的新状态

操作所得到的新状态
调用 Thread 类的构造函数。Unstarted
另一个线程调用 Thread.Start 。Unstarted
线程响应 Thread.Start 并开始运行。Running
线程调用 Thread.Sleep 。WaitSleepJoin
线程调用 Monitor.Wait 对另一个对象。WaitSleepJoin
线程调用 Thread.Join 另一个线程上。WaitSleepJoin
另一个线程调用 Thread.Suspend 。SuspendRequested
线程响应 Thread.Suspend 请求。Suspended
另一个线程调用 Thread.Resume 。Running
另一个线程调用 Thread.Abort 。AbortRequested
线程响应 Thread.Abort 。Aborted ,然后 Stopped

由于 Running 状态具有值 0,因此它不能执行位测试来发现此状态。 相反,可以使用以下测试(以伪代码表示):

if ((state & (Unstarted | Stopped)) == 0)   // implies Running   

在任何给定时间,线程通常处于多个状态。 例如,如果一个线程上被阻止 Monitor.Wait 调用,另一个线程调用 Abort 该相同线程上线程将同时处于 WaitSleepJoin 和 AbortRequested 在同一时间的状态。 在这种情况下,一旦该线程从对 Wait 的调用返回或该线程中断,它就会收到 ThreadAbortException 。

线程由于调用 Unstarted 而离开 Start 状态后,它将无法再返回到 Unstarted 状态。 同样,线程也永远无法离开 Stopped 状态。

另请参阅

ThreadAbortException
Thread
ThreadState
线程处理

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文