来自于:三五月儿

    • Thread.Start():启动线程的执行;
    • Thread.Suspend():挂起线程,或者如果线程已挂起,则不起作用;
    • Thread.Resume():继续已挂起的线程;
    • Thread.Interrupt():中止处于 Wait或者Sleep或者Join 线程状态的线程;
    • Thread.Join():阻塞调用线程,直到某个线程终止时为止
    • Thread.Sleep():将当前线程阻塞指定的毫秒数;
    • Thread.Abort():以开始终止此线程的过程。如果线程已经在终止,则不能通过Thread.Start()来启动线程。
    1. 创建线程

      1. ThreadStart entry = new ThreadStart(CalcSum);
      2. Thread workThread = new Thread(entry);

      或者

      1. Thread workThread = new Thread(new ThreadStart(CalcSum));
      1. static void CalcSum()
      2. {
      3. //do what you want
      4. }
    2. 启动线程

      1. workThread.Start();
    3. 挂起线程

    挂起线程使用Suspend()方法。
    线程被挂起后,操作被停止或进入休眠状态。
    被挂起的线程不占用任何处理器时间。
    修改前文实例代码,修改部分如下:

    1. ThreadStart entry = new ThreadStart(CalcSum);
    2. Thread workThread = new Thread(entry);
    3. workThread.Start();
    4. workThread.Suspend();//挂起线程(改动部分)
    5. CalcGap();、
    1. 恢复线程

    恢复线程使用Resume()方法。
    线程会恢复到被挂起线程之前的状态。
    修改部分代码如下:

    1. Thread workThread = new Thread(new ThreadStart(CalcSum));
    2. workThread.Start();
    3. workThread.Suspend();//挂起线程(改动部分)
    4. CalcGap();
    5. workThread.Resume();//恢复线程(改动部分)
    1. 中止线程

    线程被中止,就停止运行,是无法恢复的,因为Windows会永久地删除被中止线程的所有数据。

    1. Thread workThread = new Thread(new ThreadStart(CalcSum));
    2. workThread.Start();
    3. workThread.Abort();//中止线程(改动部分)
    4. CalcGap();

    跟挂起工作线程时的结果一样,中止工作线程后,工作线程自然不会被执行。
    如果尝试去恢复被中止的线程,修改代码如下:

    1. Thread workThread = new Thread(new ThreadStart(CalcSum));
    2. workThread.Start();
    3. workThread.Abort();
    4. CalcGap();
    5. workThread.Resume();//改动代码

    运行程序,出现运行时错误,提示:
    线程目前未运行;无法使其继续。
    这点可以理解。

    1. 休眠线程

    使线程休眠使用Sleep()方法(看着就想睡觉)。
    我们还可以使线程休眠一定的时间,累了就让他歇歇再工作。
    示例代码如下:

    1. Thread workThread = new Thread(new ThreadStart(CalcSum));
    2. workThread.Start();
    3. Thread.Sleep(10000);//修改代码
    4. CalcGap();

    从结果可以看出,主线程会被暂停一段时间后再接着运行,因为他去睡觉去了,睡了多久,睡了10000ms。休眠线程无需恢复,到指定时间会自动执行,他是不会睡到自然醒的哦。

    1. 阻塞线程

    如果后续的处理依赖于另一个已经终止的线程,可以调用Join()方法,等待线程中止。
    修改代码如下:

    1. Thread workThread = new Thread(new ThreadStart(CalcSum));
    2. workThread.Start();
    3. workThread.Join();//等待工作线程中止(修改代码)
    4. CalcGap();

    工作线程调用了Jion()方法,需待工作线程中止后,主线程才会被执行。
    Jion()的其他重载方法可以指定等待的时间期限,超过了这个时间期限,程序也会继续执行。
    示例代码:

    1. Thread workThread = new Thread(new ThreadStart(CalcSum));
    2. workThread.Start();
    3. workThread.Join(10000);//修改代码
    4. CalcGap();

    主线程会等待一段时间(10000ms),若这段时间内工作线程没挂掉,一旦超过这个时间,主线程便会开始工作。