线程问题:Interrupt可以唤醒sleep的线程吗?
C#参考手册有说,当线程进入睡眠时,它就进入WaitSeepJoin状态。如果线程处于睡眠状态,
在达到指定的睡眠时间之前唤醒线程的唯一方法是使用Interrupt()方法。 我就参照写了一
个例子如下:
但是程序运行后报异常:ThreadInterruptedException
把异常输入msdn中,它说:调用 Interrupt 时,如果一个线程处于WaitSleepJoin 状态,
则将导致在目标线程中引发 ThreadInterruptedException
这2个说的不是矛盾吗?如果线程处于sleep时,改如何及时唤醒呢?
在达到指定的睡眠时间之前唤醒线程的唯一方法是使用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时,改如何及时唤醒呢?
...全文
相关推荐
面试中多线程问题
Thread.sleep() 使当前线程在指定的时间处于“非运行”状态。线程一直持有对象的监视器。如果另一线程调用了 interrupt() 方法,它将唤醒那个“睡眠的”线程。
2020版Java多线程 21 道.pdf
**sleep()和wait()的区别**:sleep()使当前线程暂停指定时间,不会释放锁;wait()使当前线程等待,直到被唤醒或超时,会释放锁。7.
Java多线程教程吐血整理干货.md
- `wait`方法:是`Object`类的方法,用于释放当前线程持有的锁,并进入等待状态直到被其他线程唤醒。
并发编程面试专题.pdf
**问题描述:** 如何在Java中唤醒一个阻塞的线程?2.
Java如何使用interrupt()终止线程
当线程由于被调用了sleep(), wait(), join()等方法而进入阻塞状态;若此时调用线程的interrupt()将线程的中断标记设为true。


