当前位置: 首页 > 网络应用技术

什么是中断锁?有什么用?如何实现它?

时间:2023-03-09 10:52:16 网络应用技术

  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并发文章。