• Thread线程类


    Thread类位于System.Threading命名空间下,System.Threading命名空间提供一些使得可以进行多线程编程的类和接口。除同步线程活动和访问数据的类(Mutex、Monitor、Interlocked和AutoResetEvent 等)外,该命名空间还包含一个ThreadPool类(它允许用户使用系统提供的线程池)和一个Timer类(它在线程池线程上执行回调方法)。
    Thread类主要用于创建并控制线程、设置线程优先级并获取其状态。一个进程可以创建一个或多个线程以执行与该进程关联的部分程序代码,线程执行的程序代码由ThreadStart委托或ParameterizedThreadStart委托指定。
    线程运行期间,不同的时刻会表现为不同的状态,但它总是处于由ThreadState定义的一个或多个状态中。用户可以通过使用ThreadPriority枚举为线程定义优先级,但不能保证操作系统会接受该优先级。
    Thread类的常用属性及说明如表1所示。
    表1  Thread类的常用属性及说明

    属性

    说明

    ApartmentState

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

    CurrentContext

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

    CurrentThread

    获取当前正在运行的线程

    IsAlive

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

    ManagedThreadId

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

    Name

    获取或设置线程的名称

    Priority

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

    ThreadState

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


    Thread类的常用方法及说明如表2所示。
    表2  Thread类的常用方法及说明

    方法

    说明

    Abort

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

    GetApartmentState

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

    GetDomain

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

    GetDomainID

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

    Interrupt

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

    Join

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

    ResetAbort

    取消为当前线程请求的Abort

    Resume

    继续已挂起的线程

    SetApartmentState

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

    Sleep

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

    SpinWait

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

    Start

    使线程被安排进行执行

    Suspent

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

    VolatileRead

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

    VolatileWrite

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


    例  下面演示使用Thread类的相关方法和属性,开始运行一个线程,并获得该线程的相关信息,程序开发步骤如下。
    (1)新建一个Windows应用程序,命名为TestThread,默认窗体为FormTestThread.cs。
    (2)在Form1窗体中添加一个RichTextBox控件,用来显示获得的线程相关信息。
    (3)程序主要代码如下。

    获取线程的信息
    #region "窗体加载时事件"
    private void FormTestThread_Load(object sender, EventArgs e)
    {
    string strInfo = string.Empty; //定义一个字符串,用来记录线程相关信息
    Thread myThread = new Thread(new ThreadStart(threadOut)); //实例化Thread线程类对象
    myThread.Start();//启动主线程
    //获取线程相关信息
    strInfo = "线程唯一标识符:" + myThread.ManagedThreadId;
    strInfo
    += "\n线程名称:" + myThread.Name;
    strInfo
    += "\n线程状态:" + myThread.ThreadState.ToString();
    strInfo
    += "\n线程优先级:" + myThread.Priority.ToString();
    strInfo
    += "\n是否为后台线程:" + myThread.IsBackground;
    Thread.Sleep(
    1000); //使主线程休眠1秒钟
    myThread.Abort("退出");//通过主线程阻止新开线程
    myThread.Join();//等待新开的线程结束
    MessageBox.Show("线程运行结束");
    richTextBox1.Text
    = strInfo;



    }
    #endregion

      

     

    线程开始运行时的提示信息
    public void threadOut()
    {
    MessageBox.Show(
    "主线程开始运行");
    }

    注意:在程序中使用线程时,需要在命名空间区域添加using System.Threading命名空间

    运行程序,先后弹出如图1和图2所示的对话框,然后显示如图3所示主窗体,并在主窗体中显示获得的线程相关信息。
                       
    图1  线程开始运行      

    图2  线程运行结束
     
          图3  主窗体

  • 相关阅读:
    fastjson反序列化
    BaseBean构造
    easyUI_rowdata
    SVN提交报错
    jsp页面数据保留两位小数
    数据库 建立
    增删改查问
    解决plsql中文乱码问题
    oracle_解锁表
    ibatis_compareValue
  • 原文地址:https://www.cnblogs.com/wangsaiming/p/2035022.html
Copyright © 2020-2023  润新知