我们可以中断已获得锁定的线程吗?

时间:2017-04-17 14:00:35

标签: java java-threads

据我所知,Lock有一个方法lockInterruptibly,可以中断轮询获取锁的线程。所以我想知道当线程成功获取锁并在try块内部执行操作时,是否会被中断?为什么?如果可以,怎么样?

1 个答案:

答案 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();
        }
    }
}