有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java我们可以中断一个已经获得锁的线程吗?

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


共 (1) 个答案

  1. # 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();
            }
        }
    }