我的问题与所有那些会抛出InterruptedException异常的方法有关(包括Thread.sleep(...))。
我在Sun的教程中找到了一句话,它说:“当另一个线程在sleep处于活动状态时中断当前线程时,sleep会抛出InterruptedException异常。”
这是否意味着如果在中断发生时sleep不处于活动状态,那么中断将被忽略?
假设我有两个线程:threadOne和threadTwo。threadOne创建并启动threadTwo。threadTwo执行一个runnable,其run方法类似于:
创建线程后,
如果不是,那么这个中断会永远被忽略吗?
如何确保
我在Sun的教程中找到了一句话,它说:“当另一个线程在sleep处于活动状态时中断当前线程时,sleep会抛出InterruptedException异常。”
这是否意味着如果在中断发生时sleep不处于活动状态,那么中断将被忽略?
假设我有两个线程:threadOne和threadTwo。threadOne创建并启动threadTwo。threadTwo执行一个runnable,其run方法类似于:
public void run() {
:
:
try {
Thread.sleep(10 * 1000);
} catch (InterruptedException e) {
return;
}
:
:
: // In the middle of two sleep invocations
:
:
try {
Thread.sleep(10 * 1000);
} catch (InterruptedException e) {
return;
}
:
:
}
创建线程后,
threadOne
中断了 threadTwo
。假设在中断时(没有活动的睡眠方法),threadTwo
正处于两个睡眠调用之间,那么第二个睡眠方法会立即抛出 InterrupteException
吗?如果不是,那么这个中断会永远被忽略吗?
如何确保
threadTwo
总是知道中断(无论其一个睡眠方法是否活动)?
isInterrupted()
而不是interrupted()
? 我认为当线程知道它已被中断时,中断状态应该被清除。 - AmitThread.currentThread().interrupted()
更改为Thread.interrupted()
,因为它是一个静态方法。 - Amit