Java中有两种类型的锁,一个是内置的锁同步,另一种是显示锁定锁。锁锁被中断锁,而同步是不间断的锁。
SO称为中断锁是指执行时锁的中断,即可以在执行过程中接收中断的通知,从而中断执行。
PS:默认情况下锁定不会中断,而是通过特殊的“含义”,它可以使其中断锁。接下来,让我们看一下。
非中断锁的问题是,当出现“异常”时,他们只能继续等待。没有其他方法,例如以下程序。以下程序中有两个线程。其中,线程1首先获得锁定资源的相应代码,而Thread 2开始尝试在0.5s之后获得锁定资源,但是线程1被忘记释放锁定,这会导致线程2至2Always阻止情况,实施代码如下:
上述代码执行的结果如下:
从上面的结果可以看出,线程2正在等待锁的操作,但是在n长...之后...
再次查看结果,它仍然是一张熟悉的图片:
Polyte 2仍在阻止并等待线程1释放锁定资源。目前,线程2并非等待。没有其他方法。
而且,但是,当我们巧妙地拿出jconsole并试图获取僵局的特定信息时,我们得到了这个结果:
未检测到死锁信息。从上面的图中,我们可以看到,当只有一个锁定资源时,系统不会将这种情况判断为僵局,当然没有具体的信息来等待。目前,只有线程2孤独等待其“锁”。
但是,中断锁的出现可能会破坏这一僵局。等待一段时间后,它可以主动中断线程2,以解决线程阻塞等待的问题。
中断锁的核心实现代码是lock.lockressive()方法。它类似于lock.lock()方法,但是使用锁定方法可以优先考虑中断请求。中断锁的具体实现如下:
上述代码的执行结果如下:
从上面的结果可以看出,当我们使用锁定方法时,我们可以确定它是否仍在阻碍并等待一段时间。如果结果是正确的,我们可以直接中断他,如上图所示。
但是,当我们尝试用锁定方法替换锁定方法(其他代码保持不变)时,执行的结果完全不同。实施代码如下:
上述程序的执行结果如下:
从上图可以看出,当使用锁定方法时,即使调用了中断方法,也无法被Thread 2中断。
本文介绍了中断锁的实现。通过显示锁定锁的锁定方法来完成。它类似于锁定方法,但是锁定可以优先考虑中断通知。这两种方法之间的差异也是常见的访谈问题。我希望这篇文章对您有用。
遵循公共帐户“ Java中国社区”,以查看更有趣且知识渊博的Java并发文章。