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

Java多线阵列封锁等级以查看条件的实现

时间:2023-03-05 17:05:59 网络应用技术

  今天引入的条件可能会在业务开发中使用较少使用,通常在框架或中间件中更常见。本文用于Java的ArrayBlockingqueue中的条件和实现原理。

  ArrayBlockingQueue构造函数,这两个条件都是由reentrantlock的NewConditon方法构建的条件对象。

  通过查看Reentrantlock的新调节方法,您可以看到实际条件实现类是条件对象。这是今天要分析的关键对象。

  ArrayBlockingQueue的使用和不发光的使用如下1 notfull。如果队列已满,则执行notifull.await以使线程等待。当消息队列为空时,如果队列为空,则执行notempty.await。元素消费者消息结束后,标志性的。信号觉醒的生产者线程到队列发布元素。

  在下面,我们关注条件对象中如何实现等待和信号。

  主要步骤:1。创建一个新建造的等待节点以加入条件。4.如果CLH的等待队列,请通过CLH队列锁定。5。如果NextWaiter的节点不是空的,则意味着有一个新的Condtion等待节点,则是Conditon Unirectirectional directional queue movesexcept的节点取消状态6.确定是否需要中断或抛出异常

  如果最后一个等待状态不是节点。条件,您需要从等待队列中删除被取消的节点,然后创建一个节点。参数中线是当前线程。

  完成释放锁的操作后,可以从中可以看出,等待操作的执行将释放锁。首先,获取状态的状态值,然后将其重置为0。在锁定之前返回状态的值。如果失败,节点的waitstatus状态是已取消的状态

  等待队列中的节点为锁定而战,以前已经在reentrantlock中进行了分析,因此我不会在这里详细介绍。

  条件摩托车的信号唤醒第一任领域(即条件等待队列中的第一个节点)

  Dosignal开始从第一任Waiter循环唤醒尚未取消的第一个等待节点

  TransferforSignal是将等待节点的候补重置为0,然后将两个末端等待队列从条件队列转移到CLH。

  下图显示,从条件的等待队列中,它将转移到CLH等待队列。

  今天引入的孔子对象主要是有条件的等待队列。您可以创建多个条件等待队列。Reentrantlock是仅有CLH的两条路线队列。它正在等待两个路队。相反