park方法不会抛出InterruptedException,但是它也会响应中断。当外部线程对阻塞线程调用interrupt方法时,park阻塞的线程也会立刻返回,如下代码:
时间: 2024-09-30 16:12:49 浏览: 24
Interrupt方法结束线程
在Java并发编程中,`Thread.sleep()`、`Object.wait()`等方法会阻塞当前线程直到被唤醒。`java.util.concurrent.locks.Condition`接口下的`await()`方法,比如`BlockingQueue.take()`或者`Semaphore.acquire()`等,它们有一个共同的行为——`park()方法`。这个方法会使得线程进入等待状态,并且不会抛出`InterruptedException`,这是为了保持线程的优雅终止。
然而,当外部线程调用`interrupt()`方法中断了阻塞线程时,`park()`方法并不会立即抛出异常,而是允许线程检查中断标记(`Thread.interrupted()`方法),然后可以选择是否恢复中断并结束。如果线程没有检测到中断,或者选择忽略中断,那么它会在合适的时候继续执行,如队列中有元素可用或者信号量被释放时。
例如:
```java
try {
condition.await(); // 这里可能会被中断
} catch (InterruptedException e) {
Thread.currentThread().interrupt(); // 重新设置中断标志
}
```
阅读全文