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

重新进入源源代码分析

时间:2023-03-08 00:33:26 网络应用技术

  特征:

  常见的API

  conturrent.locks.Reentrantlock#NewCondition Creation创建条件等待队列java.util.concurrent.locks.reentrantlock#unlock unlock Unlock unlock示例:

  如果我使用以下代码获取锁:

  重新进入默认为非fair锁定呼叫堆栈:java.util.concurrent.locks.reentrantlock#锁

  他将在非锁锁的锁定逻辑中直接调用两个逻辑:

  呼叫完成后,获得锁的成功方法已完成,并执行了最终代表性方法。

  如果锁失败,则执行代码后执行IF逻辑。实际上,这可以分为两种方法。

  按照执行顺序,让我们先看一下团队的逻辑。

  它是将当前节点插入队列,并在必要时初始化

  之前,我们完成了阅读。当获得当前锁定时,锁发生故障时,它已成功输入AQS队列。接下来,我们继续看什么?

  可以在呼叫期间调用多种方法。将执行一些操作。

  将堆栈调用如下:java.util.concurrent.locks.reentrantlock#解锁

  我们可以从方法开始

  发行锁主要调用。首先,将上一个问题直接考虑到状态-1,然后如果当前线程不再持有锁,我们可以修改iTessence

  锁定成功后,该方法将再次返回,并将再次判断。如果AQS队列不是空的,则排队线程醒来。

  实际上,这里最重要的是它将返回这里。唤醒后强锁的逻辑仍在内部。

  当前的节点被唤醒。它将首先将方法留在方法中,然后如果锁定成功,请尝试返回到True。

  再次竞争锁主要是调用方法中的方法以获取锁定。如果锁定失败,请再次锁定锁,如果锁定成功返回。

  如果当前线程被中断,则在当前线程中断后将中断线程中断,因此可以中断支撑。相关源代码:

  实验代码:

  输出结果:

  您可以支持设置锁的超时,该锁定可以有效地避免线程饥饿的测试代码:

  输出结果

  条件出现在Java 1.5中。它用于替换传统对象wait(),notify()以实现线程之间的协作。与对象的wait()相比,notify(),使用条件的等待(),signal()在线程之间的线路协作方面更加安全,更有效。因此,通常建议使用条件。阻止队列实际使用条件来模拟线程之间的协作。条件是一个接口,基本方法是()和signal()方法;条件取决于锁定界面以生成条件的基本代码。在锁定保护中,这意味着必须在lock.lock()和lock.unlock ::

  测试场景:以下场景需要ABC3线程,将A螺纹A打印一次,然后在线程B中进行两次打印,然后打印3次C。该线程交替打印。ABC线程需要交替执行。我们需要控制它。线程执行的顺序可以通过多条件条件控制。每个线程都有一个条件对象。调用各种等待的方法以使线程等待,然后让其他线程调用其他线程调用。

  输出结果如下:

  原始:https://juejin.cn/post/7101956094137729031