是否有我可以使用的非重入读写锁?
我需要一个不可重入的ReadWriteLock,因为该锁可能由与获取它的线程不同的线程释放。(当我开始间歇性地获得TravilMonitorStateException时,我意识到了这一点。
我不确定非重入是否是正确的术语。ReentrantLock 允许当前锁定的线程再次获取它。我不希望这种行为,因此我称之为“非重入”。
上下文是我有一个使用线程池的套接字服务器。每个连接没有线程。请求可能由不同的线程处理。客户端连接可能需要锁定一个请求并解锁另一个请求。由于请求可能由不同的线程处理,因此我需要能够在不同的线程中锁定和解锁。
为了解决这个问题,假设我需要保持这种配置,并且我确实需要锁定和解锁不同的请求,因此可能有不同的线程。
这是一个ReadWriteLock,因为我需要允许多个“读者”或一个排他性的“作家”。
看起来这可以使用 AbstractQueuedSynchronizer 编写,但我担心如果我自己编写,我会犯一些微妙的错误。我可以找到各种使用 AbstractQueuedSynchronizer 但不是 ReadWriteLock 的示例。
我可以采用OpenJDK ReentrantReadWriteLock源代码并尝试删除重入部分,但我担心我不会完全正确。
我查看了番石榴和Apache Commons,但没有找到任何合适的东西。Apache Commons有RWLockManager,它可能会做我需要的,但我不确定,它似乎比我需要的更复杂。