Java StampeLock队列如何锁定请求?

Java StampeLock队列如何锁定请求?,java,multithreading,concurrency,locking,Java,Multithreading,Concurrency,Locking,我正在研究基于Java8的StampedLock()锁定缓存,但是我在网上找不到一个令人信服的实现,尽管阅读了类似的文章 我对Java的多线程和并发性产品感到不太乐观,因为ReentrantReadWriteLock不允许将读锁升级为写锁,随后很难找到一个著名的替代解决方案 我的问题是,没有明确的声明来消除我的担忧,即当读请求排队时,StampedLock将无限期地阻止写请求 查看文档,有两条评论引起了我的怀疑 从: StampeBlock的调度策略不一致 读者多于作者,反之亦然。所有的“尝试”

我正在研究基于Java8的StampedLock()锁定缓存,但是我在网上找不到一个令人信服的实现,尽管阅读了类似的文章

我对Java的多线程和并发性产品感到不太乐观,因为
ReentrantReadWriteLock
不允许将读锁升级为写锁,随后很难找到一个著名的替代解决方案

我的问题是,没有明确的声明来消除我的担忧,即当读请求排队时,
StampedLock
将无限期地阻止写请求

查看文档,有两条评论引起了我的怀疑

从:

StampeBlock的调度策略不一致 读者多于作者,反之亦然。所有的“尝试”方法都是尽力而为的 并且不一定符合任何日程安排或公平政策

从:

因此,它暗示了一个读写锁队列,但我需要阅读和消化1500行源代码才能搞定它

我认为它一定在那里,因为我发现了一个表明
StampedLock
是多读/少写的方法。然而,我仍然担心,因为缺乏在线报道

从根本上说,我想我期待着一个实现,我可以在javadoc之后即插即用,但最终我在网络上四处寻找,想知道为什么没有一个循环的
StampedLock#tryOptimisticRead()
——即使是

Java并发性有这么难吗,还是我遗漏了一些明显的东西

“Java并发性有这么难吗,还是我错过了一些明显的东西?”

1.与Java并发相比,java并发是否比C++(Python)或Python并发更难。 但是,在任何允许不同线程直接更新共享数据结构的语言中,并发都是很困难的。(仅)支持CSP类并发的语言更容易理解和推理

参考:


具体来说,Java中的大多数锁定形式确实不能保证公平性。事实上,许多与线程调度有关的事情都是(故意)松散地指定的。但编写避免这些问题的代码并不困难。。。一旦您了解了这些库以及如何使用它们


1-我的观点是,Java的并发支持至少比大多数其他同类语言更容易推理。Java内存模型(JLS的第17.4章)有很好的规定,Goetz等人的“Java并发实践”很好地解释了并发编程的细节

2-。。。。对于大多数程序员来说

 * These rules apply to threads actually queued. All tryLock forms
 * opportunistically try to acquire locks regardless of preference
 * rules, and so may "barge" their way in.  Randomized spinning is
 * used in the acquire methods to reduce (increasingly expensive)
 * context switching while also ....