zoukankan      html  css  js  c++  java
  • 线程状态(转)

    转自:http://www.cnblogs.com/Echang/archive/2008/07/15/1243232.html

    先了解一下c# 所有运算符号的内容

    表达式中的运算符按照称为运算符优先级的特定顺序计算。下表根据运算符执行的操作类型将它们划分到不同的类别中。类别按优先级顺序列出。

    基本

    x.y、f(x)、a[x]、x++、x--newtypeofcheckedunchecked

    一元

    +-!~++x--x、(T)x

    算术 -- 乘法

    *, /, %

    算术 -- 加法

    +, -

    移位

    <<, >>

    关系和类型检测

    <, >, <=, >=, is, as

    相等

    ==, !=

    逻辑(按优先级顺序)

    &, ^, |

    条件(按优先级顺序)

    &&, ||, ?:

    赋值

    =, +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=

    当表达式中出现两个具有相同优先级的运算符时,它们根据结合性进行计算。左结合运算符按从左到右的顺序计算。例如,x * y / z 计算为 (x * y) / z。右结合运算符按从右到左的顺序计算。赋值运算符和三元运算符 (?:) 是右结合运算符。其他所有二元运算符都是左结合运算符。然而,C# 标准没有指定何时执行表达式中的增量指令的“设置”部分。

    线程状态

    System.Threading.ThreadState枚举指定Thread的执行状态,此枚举有一个FlagsAttribute属性,允许其成员值按位组合。ThreadState定义的枚举常数如表19-3所示。

    表19-3 ThreadState定义的枚举常数

    成员名称

       

    Aborted

    线程处于Stopped状态中

    AbortRequested

    已对线程调用了Thread.Abort方法,但线程尚未收到试图终止它的挂起的System.Threading. ThreadAbortException

    Background

    线程正作为后台线程执行(相对于前台线程而言)。此状态可以通过设置Thread.IsBackground属性来控制

    Running

    线程已启动,它未被阻塞,并且没有挂起的ThreadAbortException

    Stopped

    线程已停止

    StopRequested

    正在请求线程停止。这仅用于内部

    Suspended

    线程已挂起

    SuspendRequested

    正在请求线程挂起

    Unstarted

    尚未对线程调用Thread.Start方法

    WaitSleepJoin

    由于调用WaitSleepJoin,线程已被阻止

    Thread对象的ThreadState属性提供一个由ThreadState定义的位掩码,它指示线程的当前状态。一个线程至少总是处于ThreadState枚举中定义的一个可能状态,并且可以同时处于多个状态。

    注意,只能在一些调试方案中使用线程状态,而不应该在代码中使用线程状态来同步线程活动。

    在创建托管线程时,该线程处于Unstarted状 态。线程会保持Unstarted状态,直到被操作系统调度到已启动状态。调用Start方法使操作系统知道该线程可启动,但是它并不直接更改线程的状 态。一旦线程处于已启动的状态中,就可以执行许多操作来使线程更改状态。表19-4列出了使状态发生更改的操作,以及相应的新状态。

    表19-4 使线程状态发生更改的操作及相应的新状态

       

    ThreadState

    在公共语言运行库中创建线程

    Unstarted

    线程调用Start

    Unstarted

    线程开始运行

    Running

    续表

       

    ThreadState

    线程调用Sleep

    WaitSleepJoin

    线程对其他对象调用Wait

    WaitSleepJoin

    线程对其他线程调用Join

    WaitSleepJoin

    另一个线程调用Interrupt

    Running

    另一个线程调用Suspend

    SuspendRequested

    线程响应Suspend请求

    Suspended

    另一个线程调用Resume

    Running

    另一个线程调用Abort

    AbortRequested

    线程响应Abort请求

    Stopped

    线程被终止

    Stopped



    判断线程状态需要根据状态进行逻辑运算 如
    if (m_MailThread.ThreadState & (System.Threading.ThreadState.WaitSleepJoin | System.Threading.ThreadState.Background | System.Threading.ThreadState.Running)) == m_MailThread.ThreadState)
    {
       //线程正在执行
    }

    与结果进行与运算 如果跟原先的结果没有变化的,则为判断条件成立
    因为 1&1 =1; 结果是不变的才对.
    作者:KKcat
        
    个人博客:http://jinzhao.me/
        
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    Selenium+java
    小白学习安全测试(一)——Http协议基础
    解决chrome运行报错unknown error: cannot get automation extension
    Eclipse 中 不能创建 Dynamic web project
    Jmeter遇到Connection reset by peer的解决方法
    用Java检测远程主机是否能被连接
    Java 连接远程Linux 服务器执行 shell 脚本查看 CPU、内存、硬盘信息
    jenkins的svn路径中文问题
    MySql的存储引擎介绍
    Netty SSL性能调优
  • 原文地址:https://www.cnblogs.com/jinzhao/p/1258880.html
Copyright © 2011-2022 走看看