• 创建线程


      

    线程是使用Thread类来处理的,该类在System.Threading命名空间中。通过实例化一个Thread对象就可以创建一个线程。创建新的 Thread 对象时,将创建新的托管线程。Thread 类具有接受一个 ThreadStart 委托或 ParameterizedThreadStart 委托的构造函数,该委托包装了调用 Start 方法时由新线程调用的方法。代码如下:

    Thread t = new Thread(new ThreadStart(TestMethord));
    t.Start();

    上述代码实例化了一个Thread 对象,并指明了将要调用的方法TestMethord,然后启动线程。ThreadStart委托中作为参数的方法不需要参数,并且没有返回值。ParameterizedThreadStart委托一个对象为参数,利用这个参数可以很方便的向线程传递参数。代码如下:

    Thread th = new Thread(new ParameterizedThreadStart (TestMethord));
    th.Start(99);

    99’就是向方法传递的参数, ParameterizedThreadStart主要用来调用有参数的方法。

    线程是通过线程类Thread来处理的,下面介绍Thread类的属性和方法。如表38.1所示。

    1Thread类的属性

    Thread类的属性如表表所示。

                                   Thread类常用属性及说明

    属性

    说明

    ApartmentState

    获取或设置此线程的单元状态

    CurrentContext

    获取线程正在其中执行的当前上下文

    CurrentCulture

    获取或设置当前线程的区域性

    CurrentPrincipal

    获取或设置线程的当前负责人(对基于角色的安全性而言)

    CurrentThread

    获取当前正在运行的线程

    CurrentUICulture

    获取或设置资源管理器使用的当前区域性以便在运行时查找区域性特定的资源

    ExecutionContext

    获取一个 ExecutionContext 对象,该对象包含有关当前线程的各种上下文的信息

    IsAlive

    获取一个值,该值指示当前线程的执行状态

    IsBackground

    获取或设置一个值,该值指示某个线程是否为后台线程

    IsThreadPoolThread

    获取一个值,该值指示线程是否属于托管线程池

    ManagedThreadId

    获取当前托管线程的惟一标识符

    Name

    获取或设置线程的名称

    Priority

    获取或设置一个值,该值指示线程的调度优先级

    ThreadState

    获取一个值,该值包含当前线程的状态

    下面对Thread类中比较重要的属性进行详细介绍。

    1IsAlive属性:判断线程的状态:

    获取一个值,该值指示当前线程的执行状态。

    语法:

        public bool IsAlive { get; }

    属性值:如果此线程已启动并且尚未正常终止或中止,则为 true;否则为 false

    2Name属性

    获取或设置线程的名称。

    语法:

        public string Name { get; set; }

    属性值:包含线程名称的字符串,或者如果未设置名称,则为空引用。

    3ThreadState 属性

    获取一个值,该值包含当前线程的状态。

    语法:

        public ThreadState ThreadState { get; }

    属性值:ThreadState 值之一,它指示当前线程的状态。初始值为 Unstarted

    2Thread类的方法

    Thread类的方法如下表所示。

                                   Thread类常用方法及说明

    方法

    说明

    Abort

    在调用此方法的线程上引发 ThreadAbortException,以开始终止此线程的过程。调用此方法通常会终止线程

    AllocateDataSlot

    在所有的线程上分配未命名的数据槽

    AllocateNamedDataSlot

    在所有线程上分配已命名的数据槽

    BeginCriticalRegion

    通知宿主执行将要进入一个代码区域,在该代码区域内线程中止或未处理的异常的影响可能会危害应用程序域中的其他任务

    BeginThreadAffinity

    通知宿主托管代码将要执行依赖于当前物理操作系统线程的标识的指令

    EndCriticalRegion

    通知宿主执行将要进入一个代码区域,在该代码区域内线程中止或未处理的异常仅影响当前任务

    EndThreadAffinity

    通知宿主托管代码已执行完依赖于当前物理操作系统线程的标识的指令

    Equals 

    确定两个 Object 实例是否相等

    FreeNamedDataSlot

    为进程中的所有线程消除名称与槽之间的关联

    GetApartmentState

    返回一个 ApartmentState 值,该值指示单元状态

    GetCompressedStack

    返回一个 CompressedStack 对象,该对象可用于捕获当前线程的堆栈

    GetData

    在当前线程的当前域中从当前线程上指定的槽中检索值

    GetDomain

    返回当前线程正在其中运行的当前域

    GetDomainID

    返回惟一的应用程序域标识符

    GetHashCode

    返回当前线程的哈希代码

    GetNamedDataSlot

    查找已命名的数据槽

    GetType 

    获取当前实例的 Type

    Interrupt

    中断处于 WaitSleepJoin 线程状态的线程

    Join

    阻止调用线程,直到某个线程终止时为止

    MemoryBarrier

    同步内存。其效果是将缓存内存中的内容刷新到主内存中,从而使处理器能执行当前线程

    ReferenceEquals 

    确定指定的 Object 实例是否是相同的实例

    ResetAbort

    取消为当前线程请求的 Abort

    Resume

    继续已挂起的线程

    SetApartmentState

    在线程启动前设置其单元状态

    SetCompressedStack

    对当前线程应用捕获的 CompressedStack

    SetData

    在当前正在运行的线程上为此线程的当前域在指定槽中设置数据

    Sleep

    将当前线程阻止指定的毫秒数

    SpinWait

    导致线程等待由 iterations 参数定义的时间量

    Start

    使线程被安排进行执行

    Suspend

    挂起线程,或者如果线程已挂起,则不起作用

    ToString 

    返回表示当前 Object String

    TrySetApartmentState

    在线程启动前设置其单元状态

    VolatileRead

    读取字段值。无论处理器的数目或处理器缓存的状态如何,该值都是由计算机的任何处理器写入的最新值

    VolatileWrite

    立即向字段写入一个值,以使该值对计算机中的所有处理器都可见

    下面对Thread类中比较重要的方法进行详细介绍。

    1Abort()方法

    在调用此方法的线程上引发 ThreadAbortException,以开始终止此线程的过程。调用此方法通常会终止线程。

    语法:

        public void Abort ()

    通常在关闭线程时调用该方法。

    2Jion ()方法

    在继续执行标准的 COM SendMessage 消息泵处理期间,阻止调用线程,直到某个线程终止为止。

    语法:

        public void Join ()

    使用此方法确保线程已终止。如果线程不终止,则调用方将无限期阻止。

    3Sleep ()方法

    将当前线程挂起指定的时间。

    语法:

    public static void Sleep (int millisecondsTimeout)

    参数millisecondsTimeout 是指线程被阻止的毫秒数。指定零 (0) 以指示应挂起此线程以使其他等待线程能够执行。指定 Infinite 以无限期阻止线程。

    4Start()方法

    使线程被安排进行执行。

    语法:

        public void Start ()

    此方法通常用来启动一个线程,但线程一旦终止,它就无法通过再次调用 Start 来重新启动。

    不进则退、与时俱进
  • 相关阅读:
    【POJ 2259】Team Queue【队列】
    【POJ 2259】Team Queue【队列】
    【HDU 4699】Editor【栈】
    【HDU 4699】Editor【栈】
    【HDU 4699】Editor【栈】
    【POJ 2559】Largest Rectangle in a Histogram【栈】
    数据结构实验之栈八:栈的基本操作
    数据结构实验之栈八:栈的基本操作
    数据结构实验之栈七:出栈序列判定
    数据结构实验之栈七:出栈序列判定
  • 原文地址:https://www.cnblogs.com/wenrenhua08/p/3993660.html
Copyright © 2020-2023  润新知