线程问题:Interrupt可以唤醒sleep的线程吗?

JZ_7975 JZ_7975 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
C#参考手册有说,当线程进入睡眠时,它就进入WaitSeepJoin状态。如果线程处于睡眠状态,
在达到指定的睡眠时间之前唤醒线程的唯一方法是使用Interrupt()方法。 我就参照写了一
个例子如下:


static Thread t1;
public static void Main()
{
Console.WriteLine("Begin...");
t1 = new Thread(new ThreadStart(Sleep10));
t1.Start();

Thread t2 = new Thread(new ThreadStart(WakeUpT1));
t2.Start();

Console.WriteLine("End...");
Console.ReadLine();
}

/// <summary>
/// 睡眠十秒钟
/// </summary>
static void Sleep10()
{
Thread.Sleep(10000);
Console.WriteLine("10秒后才执行此语句");
}

/// <summary>
/// 中断线程
/// </summary>
static void WakeUpT1()
{
if (t1.ThreadState == System.Threading.ThreadState.WaitSleepJoin)
{
Console.WriteLine("线程1强制中断");
t1.Interrupt();
}
}

但是程序运行后报异常:ThreadInterruptedException

把异常输入msdn中,它说:调用 Interrupt 时,如果一个线程处于WaitSleepJoin 状态,
则将导致在目标线程中引发 ThreadInterruptedException

这2个说的不是矛盾吗?如果线程处于sleep时,改如何及时唤醒呢?
...全文
评论 4
收藏 已收藏
分享
返回顶部
JZ_7975
C# 111,128 成员 642,537 内容