首页天道酬勤java aqs,java底层是c吗

java aqs,java底层是c吗

张世龙 05-04 18:21 103次浏览

虽然前面介绍的几个博客总是提到CLH队列,但在AQS中CLH队列是一个队列,用于维护一系列严格符合FIFO的线程。 他没有饥饿,可以确保严格的先发制人服务公平性。 下图显示了CLH队列节点的图像。

CLH队列中的节点QNode包含一个锁定字段,指示节点是否需要获取锁定。 如果为true,则需要获取;如果为false,则不需要获取。 在CLH队列中,节点和节点之间不是通过next指针连接的,而是受myPred指向的节点变化影响的myNode的操作。

假设有两个线程:线程a和线程b。 如果需要获取锁定才能启动线程a,他将创建一个QNode节点,并将locked设置为true,指示需要获取锁定。 它还获取指向前体的myPred,并在前体节点的locked上旋转,以指示前体节点是否已锁定。 锁定为false,此行为通常称为旋转。 当然,这里将tail面向自身表示

线程b随后被添加到CLH队列中。 在这种情况下,tail域必须指向线程b。

CLH队列锁定的优点是空间复杂度低。 (如果有n个线程,l个锁,并且每个线程只获取一个锁,则所需的存储空间为o(LN ),n个线程具有n个myNode,l个锁具有l个tail )。)。 CLH的突变体应用于AQS。

参考文献

java集合线程安全,clh队列是什么