Java 并发的最佳锁:一次写入和无限次读取

Java 并发的最佳锁:一次写入和无限次读取,java,concurrency,locks,Java,Concurrency,Locks,Java中是否有允许我这样做的锁 一次执行一次写入操作 无限数量的读取操作(即使获得了写入锁) 可选但很好:锁超时-在一段时间后释放锁以避免永远死锁 听起来好像没有任何情况下不能进行读取。你真的需要读锁吗?如果没有,那么您应该只能够使用with 1许可证来保护写权限。如果您仍然想跟踪发生了多少次读取而无法阻止任何读取,则始终可以使用。。。。这叫做写锁定,读不锁定?@Xymostech是的,但即使已经有写锁定,读操作仍必须能够继续。我不明白为什么写锁定会阻止读的发生。如果你只是在读的时候不请求锁

Java中是否有允许我这样做的锁

  • 一次执行一次写入操作
  • 无限数量的读取操作(即使获得了写入锁)
  • 可选但很好:锁超时-在一段时间后释放锁以避免永远死锁

听起来好像没有任何情况下不能进行读取。你真的需要读锁吗?如果没有,那么您应该只能够使用with 1许可证来保护写权限。如果您仍然想跟踪发生了多少次读取而无法阻止任何读取,则始终可以使用。

。。。这叫做写锁定,读不锁定?@Xymostech是的,但即使已经有写锁定,读操作仍必须能够继续。我不明白为什么写锁定会阻止读的发生。如果你只是在读的时候不请求锁,没有什么能阻止你…ReentrantReadWriteLock?@Xymostech现在我明白你的意思了,你是对的。。。那么可选的东西呢?超时。有可能吗?你说得对。我不需要读锁。但是信号量看起来在超时后无法释放许可证。@托马斯我知道有很多锁在获取阶段可以超时,但我不知道有任何锁在被获取后自动释放。您可能需要为此编写一些自定义内容,但我觉得我应该强烈警告您不要这样做。如果任务的运行时间超过超时时间,则在存在多个写入程序的情况下,数据将损坏。为了避免死锁,我认为您最好先观察无进展状态,然后再观察任务(如果发生)。