`

关于Thread.IsAlive属性

    博客分类:
  • J2SE
 
阅读更多

今天在讨论多线程的时候,谈到了这个属性。IsAlive,顾名思义,它表示线程当前是否为可用状态,如果线程已经启动,并且当前没有任何异常的话,则返回true,否则为false

 

为什么要了解这个属性,是因为下面代码有的朋友不是很理解

 

下面代码演示的多个线程对共享资源争用的问题,具体细节这里不详细讨论了。

Thread thread1 = new Thread(new ThreadStart(SomeMethod));
Thread thread2 = new Thread(new ThreadStart(SomeMethod));
Thread thread3 = new Thread(new ThreadStart(SomeMethod));
Thread thread4 = new Thread(new ThreadStart(SomeMethod));
Thread thread5 = new Thread(new ThreadStart(SomeMethod));

thread1.Name = "Thread 1";
thread2.Name = "Thread 2";
thread3.Name = "Thread 3";
thread4.Name = "Thread 4";
thread5.Name = "Thread 5";
thread1.Start();

while (!thread1.IsAlive)
    Thread.Sleep(100);

thread2.Start();
while (!thread2.IsAlive)
    Thread.Sleep(100);

thread3.Start();
while (!thread3.IsAlive)
    Thread.Sleep(100);

thread4.Start();
while (!thread4.IsAlive)
    Thread.Sleep(100);

thread5.Start();
while (!thread5.IsAlive)
    Thread.Sleep(100);

 大家有些疑惑的是,为什么Thread.Start之后,要用while去等待它Alive呢?这个代码通常不写的话,也是没有什么问题的。

但原理上说,其实简单地Start,并不代表线程能马上启动起来(也许CPU正在忙其他的事情),当然它迟早会被启动起来,但上面的代码确保了几个线程是依次被启动的

 

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    C#多线程之Thread中Thread.IsAlive属性用法分析

    2. **Thread.IsAlive属性** `Thread.IsAlive`属性返回一个布尔值,表示线程是否处于可运行或运行状态。如果线程已经启动并且没有异常导致其停止,那么`IsAlive`将返回`true`;反之,如果线程未启动,或者线程已经...

    c_thread.rar_C# Thread_进程_进程管理

    "c_thread.rar"这个压缩包中的内容显然是关于使用C#进行线程管理和进程控制的示例或教程。下面我们将深入探讨C#中的线程和进程管理。 一、C#中的线程 线程允许应用程序同时执行多个任务。在C#中,可以使用`System....

    一个使用thread类的windows应用实例

    `Thread.IsAlive`属性可用来检查线程是否还在运行。还有`Thread.Priority`属性,可以设置线程的优先级,虽然不建议频繁调整,但有时可能需要为关键任务赋予更高的优先级。 在处理UI更新时,必须注意线程同步问题。...

    浅析.Net下的多线程编程[文].pdf

    Thread类提供了IsAlive属性来检查线程是否处于活动状态。在文档的另一部分中提到:“if(thread.IsAlive){thread.Suspend();}”,意味着如果线程仍在活动状态,则可以挂起它。不过需要注意的是,Thread.Suspend方法和...

    C#多线程——关于C#多线程的一个技术文档

    在C#中,可以使用`IsAlive`属性检查线程是否仍在运行,然后通过调用`Abort`方法来停止线程: ```csharp if (thread.IsAlive) { thread.Abort(); } ``` 请注意,这并不总是安全的,因为线程可能在关键操作中间...

    vb.net多线程源码实例.zip

    使用Thread.IsAlive属性检查线程是否还在运行,Thread.Join方法使调用线程等待指定线程结束。 通过这个VB.NET多线程实例,你可以学习如何在实践中创建、管理、同步线程,以及如何处理线程间的通信和数据共享。理解...

    C#多线程学习(二)如何操纵一个线程.pdf

    接下来,我们可以使用Thread的IsAlive属性来检查线程是否正在运行。IsAlive属性会返回一个布尔值,指示线程是否已经开始执行且尚未停止。基于此属性,我们可以编写代码来等待线程结束: ```csharp while (!oThread....

    asp.net开发Thread问题集

    更好的方法是创建一个专门的线程类,将参数作为构造函数的输入,而返回值可以通过类的属性或方法来获取。 问题三,线程占用CPU过高,通常是因为无休止的循环导致。解决这个问题的关键是在适当的地方插入`Thread....

    开发过程中多线程的应用技巧

    例如,`Thread.IsAlive`属性可以用来检查线程是否仍在运行,但仅凭此属性无法准确判断线程实际的执行状态,可能造成误判。而`Thread.ThreadState`属性提供更详细的状态信息,但处理复杂状态组合时需格外小心。 相比...

    C# winfrom 带参数与无参数的线程(可更新界面UI)

    3. **线程的开启与关闭**:线程启动后,可以通过调用`Join()`使其等待,或者使用`IsAlive`属性检查线程状态。关闭线程时,一般不直接停止,而是通过设置标志或取消令牌来指示线程结束工作,因为直接调用`Abort()`...

    Thread实例( C# )

    `Thread`类提供了检查和改变线程状态的方法,如`IsAlive`、`Abort`、`Interrupt`等。了解线程的状态(如挂起、运行、停止)对于线程管理至关重要。 4. **线程优先级** 可以设置线程的优先级,但不保证优先级高的...

    .net版本简单线程调用源码.rar.rar

    可以使用`Thread.CurrentThread`获取当前线程信息,并通过`Thread.IsAlive`检查线程是否还在运行。 10. **线程异常处理**: 如果线程中抛出未捕获的异常,那么默认情况下该线程将终止。在主线程中,可以通过`...

    用线程实现进度条显示

    = null && workerThread.IsAlive) { workerThread.Abort(); } ``` 此外,C# 4.0 引入了 `Task` 和 `Parallel` 类,提供了更高级别的异步编程模型。使用 `Task.Run` 可以更方便地将工作调度到后台线程,同时 `...

    Unity3D中使用串口收发数据,仅供参考

    3. **设置串口参数**:定义串口的基本属性,包括端口号、波特率、校验位、数据位以及停止位等。 ```csharp public string portName = "COM2"; // 端口号 public int baudrate = 12800; // 波特率 public Parity ...

    在C#中编写多线程应用程序

    但在使用之前,最好先检查线程是否还处于活动状态,通过`IsAlive`属性进行判断: ```csharp if (thread1.IsAlive) { thread1.Abort(); } ``` - **调整优先级**:线程的优先级决定了线程的执行顺序。可以通过...

    vb 多线程 实例(thread 类创建)

    Thread类提供了多种属性来检查和控制线程状态,如IsAlive、Priority(设置线程优先级)和Abort(强制终止线程)。但是,应该谨慎使用Abort,因为它可能导致程序状态不一致。 5. **Join和Sleep**: `Join`方法用于...

    用C#实现的unity线程初步

    if (thread.IsAlive) { thread.Abort(); } ``` 然而,使用`Abort()`应当谨慎,因为它可能会引发异常并且可能导致不可预测的结果。 三、暂停和恢复线程 你可以使用`Sleep()`方法让线程暂时停止执行: ```csharp ...

    VB实现多线程

    VB提供了一些方法来检查和改变这些状态,如`Thread.IsAlive`、`Thread.Abort`等。 3. **同步与互斥**: 在多线程环境中,数据访问的安全性是一个关键问题。VB提供了`Mutex`、`Semaphore`和`Monitor`等工具来实现线程...

    C多线程编程实战

    - `Thread.IsAlive`属性检查线程是否还在运行,`Thread.Join()`等待线程结束。 通过实践这些案例,你可以深入理解C#多线程编程的各个方面,包括同步、异步、并发控制、线程安全和通信,从而编写出更加高效、稳定的...

    C#线程参考手册相关code

    - `Thread.IsAlive`属性检查线程是否还在运行。 - `Thread.Abort`方法强制终止线程,但不推荐使用,因为可能会导致未捕获的异常和数据不一致。 - `Thread.Join`使当前线程等待指定线程完成。 6. **线程优先级** ...

Global site tag (gtag.js) - Google Analytics