java - 通过锁链锁

标签 java concurrency locking

Lock (java.util.concurrent.locks.Lock) 相对于 intrinsic lock 的优势之一是 Lock 有利于“链锁”。链式加锁是,为A持有锁,然后获取B,获取B后释放A,再获取C ...

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

干杯, 维克

最佳答案

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

把这想象成一个墨西哥卷饼吧,你有一排消费者,另一边有四个左右的工作人员。您不希望任何消费者跳到其他消费者之前,也不希望任何工作人员一次为多个消费者服务。您可以在每个服务器之间创建队列,但您知道管道是严格顺序的,有时这种抽象并不是代码中的最佳表示。

但是,您可能有特殊的处理方式,希望能够获取管道的其中一个阶段。例如,最后的收银员。如果有人进来要礼品卡,他们可以跳过队列直接去收银台。该模型减少了平均等待时间/延迟,同时为其他工作人员提供必要的锁定和顺序保证。

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

最后,别忘了java的synchronized能力是严格嵌套的,只能按照获取锁的顺序释放锁。如果您有很长的复杂管道,则不理想。

关于java - 通过锁链锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1160757/

相关文章:

java - 如何通过中间层调用Java中的方法?

java - 由于每个 hashmap 桶可以包含大量条目,因此如何确定 hashmap 已满

linux - 如果父进程仍在运行,子进程的 PID 是否可以重用?

c# - 将位图绘制到另一个位图上会产生扭曲的图像

java - 无法成功将字符串值 "$10.55"作为 spring 路径变量传递

java - 转换网址

c++ - 原子 vector 完全线程安全?

java - Java 7 异步 NIO2 服务器上的连接被拒绝

c - 尝试理解 pthread_cond_signal()

concurrency - 应用程序对象和并发问题