java - 我们可以中断已获取锁的线程吗?

标签 java java-threads

据我所知,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/

相关文章:

java - JDBC 类型 4 驱动程序

java - java多线程程序中的Volatile变量

java - 如何在 Java 线程运行时中断或终止它

java - 区间分区的生产者-消费者

java - FoundationDB 中的 getKey 返回意外结果

java - 将字节数组转换为 Int 奇数结果 Java 和 Kotlin

Java 无法将给定对象格式化为日期

java - 如何在 java 中使用 URL 从 amazon S3 下载对象

java - 用于获取 Java 进程的线程转储的 Shell 脚本

java - 两个短命线程 vs. Executor