据我所知,Lock
有一个方法lockInterruptically
,它可以中断正在轮询以获取锁的线程。所以我想知道当线程成功获取锁并在 try block 内执行操作时,是否可以中断?为什么?如果可以的话,如何实现?
最佳答案
是的,但是您需要非常小心,以确保在这样做时释放锁。
这是 Java 中的一种情况,如果能够保证在对象超出范围时调用析构函数,那就太好了。
幸运的是,您可以使用 try ...finally
block 来绕过该限制。您的异步代码可能如下所示:
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();
}
}
}
关于java - 我们可以中断已获取锁的线程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43452981/