问题
In the book Thinking in Java it is written that Thread.interrupt()
cannot interrupt a thread which is trying to acquire a synchronized lock, I want to know why?
回答1:
A blocking operation can be interrupted only if it is declared to throw InterruptedException
. Clearly, a synchronized
block does not declare it, therefore it is impossible to interrupt a thread while it is waiting to acquire a lock.
Alternatively you can use an explicit lock and call Lock.lockInterruptibly()
.
回答2:
The book is wrong, unless it is only referring to the synchronized
keyword. Object.wait()
throws InterruptedException
.
来源:https://stackoverflow.com/questions/32024436/why-cant-thread-interrupt-interrupt-a-thread-trying-to-acquire-lock