中断的线程是否会释放它在处理时到目前为止所获取的所有锁定?

时间:2014-02-27 10:06:59

标签: java multithreading interrupt

假设我在UI上有两个按钮。开始和停止。 开始调用一个帖子,停止按钮立即停止该线程,无论该线程在做什么。

要实现停止,我可以使用java.lang.Thread.interrupt()方法。但是我想知道在中断处理期间中断线程是否会实际释放它到目前为止所获得的所有锁?

3 个答案:

答案 0 :(得分:1)

当你启动任何线程时,它会获得一个锁。在你的情况下,它不会停止,直到它完成你已分配的任务。

答案 1 :(得分:1)

不,不会。此示例程序不会退出:

public final class DontDoThat
{
    public static void main(final String... args)
        throws InterruptedException
    {
        final Lock lock = new ReentrantLock();

        final Thread thread = new Thread(new Runnable()
        {
            @Override
            public void run()
            {
                lock.lock();
            }
        });

        thread.start();
        thread.join();
        System.out.println("Done with thread");
        lock.lock(); // BLOCKS
        try {
            System.out.println("Out");
        } finally {
            lock.unlock();
        }

    }
}

(旁注:这里的Reentrant表示相同的帖子可以.lock()不止一次)

答案 2 :(得分:0)

在Thread中读取中断方法的javadoc。如果线程没有被任何方式阻塞,则调用中断将只设置中断状态。您可能必须专门检查此状态才能采取措施。

根据您的实施,中断线程可能无法释放锁定。当线程从同步块中出来时或者被要求显式释放锁时(例如从锁定/条件中调用等待或类似构造),将释放锁。