提到了Lock(java.util.concurrent.locks.Lock)相对于固有锁的优点之一是Lock有助于“链锁”。链锁是,为A持有一个锁,然后获取B,在获得B释放A之后再获取C。

我只是很好奇,你们是否遇到过需要使用链锁的情况?

干杯,
维克

最佳答案

如果您有一系列相互独立的关键部分,但希望按顺序执行的任何情况都是合适的。

可以将其想象为墨西哥卷饼吧,您有一排消费者,而另一侧有四个左右的工人。您既不希望任何消费者领先于其他消费者,也不希望任何工人一次为一个以上的消费者提供服务。您可以在每个服务器之间创建队列,但是您知道管道严格是顺序的,有时抽象并不是代码中的最佳表示。

但是,您可能需要特殊的处理才能获得流水线的其中一个阶段。例如末尾的收银员。如果有人进来拿礼品卡,他们可以跳过队列,直接去收银员。该模型减少了平均等待时间/等待时间,同时为其他工作人员提供了必要的锁定和顺序保证。

与计算中的任何东西一样,有很多方法可以达到相同的效果,但是域模型和实现模型之间的认知距离会影响代码的清晰度。因此,如果您有一个应用程序要确保在获取序列中的另一个资源之前不要释放一个资源,那么锁链是一种便捷的解决方案。

最后,不要忘记Java的同步功能是严格嵌套的,您只能按照获取它的顺序释放锁。如果您有很长的复杂管道,则不理想。

10-05 23:08