据我所知,Lock
有一个方法lockInterruptibly
,可以中断轮询获取锁的线程。所以我想知道当线程成功获取锁并在try
块内部执行操作时,是否会被中断?为什么?如果可以,怎么样?
答案 0 :(得分:1)
是的,但是如果你这样做,你需要非常小心以确保你释放锁。
这是Java中的一种情况,当对象超出范围时,保证调用析构函数会非常好。
幸运的是,您可以使用try ... finally
块来解决该限制。您的异步代码可能如下所示:
class Foo implements Runnable
{
@Override
public void run()
{
Lock.lock();
try
{
bar();
if (Thread.isInterrupted()) return; // finally block will be called
bar();
if (Thread.isInterrupted()) return;
bar();
}
finally
{
Lock.unlock();
}
}
}