Lock (java.util.concurrent.locks.Lock) 相对于 intrinsic lock 的优势之一是 Lock 有利于“链锁”。链式加锁是,为A持有锁,然后获取B,获取B后释放A,再获取C ...
我只是好奇,你们有没有遇到过需要使用链锁的情况?
干杯, 维克
最佳答案
任何您有一系列相互独立的关键部分但您希望按顺序执行的情况都是合适的。
把这想象成一个墨西哥卷饼吧,你有一排消费者,另一边有四个左右的工作人员。您不希望任何消费者跳到其他消费者之前,也不希望任何工作人员一次为多个消费者服务。您可以在每个服务器之间创建队列,但您知道管道是严格顺序的,有时这种抽象并不是代码中的最佳表示。
但是,您可能有特殊的处理方式,希望能够获取管道的其中一个阶段。例如,最后的收银员。如果有人进来要礼品卡,他们可以跳过队列直接去收银台。该模型减少了平均等待时间/延迟,同时为其他工作人员提供必要的锁定和顺序保证。
与计算中的任何事物一样,有很多方法可以达到相同的效果,但是领域模型和实现模型之间的认知距离会影响代码的清晰度。因此,如果您有一个应用程序,您希望确保在获取序列中的下一个资源之前不会释放一个资源,那么锁链是一种方便的解决方案。
最后,别忘了java的synchronized能力是严格嵌套的,只能按照获取锁的顺序释放锁。如果您有很长的复杂管道,则不理想。
关于java - 通过锁链锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1160757/