Redisson 从不同线程释放锁

Avi*_*rmi 7 java locking redis redisson

我正在尝试创建一个基础设施,不同的机器通过 Redisson 获取共享锁。一旦获得锁,一些异步任务就完成了,最后,当我完成工作时,我通过当前正在运行的线程释放 Redisson 锁 - 但我收到以下错误

java.lang.IllegalMonitorStateException: attempt to unlock lock, not locked by current thread by node id: xxxxx thread-id: 57
Run Code Online (Sandbox Code Playgroud)

所以,我明白那个意思,但是因为我要执行异步工作,所以我不能使用获取线程来执行释放。

我不应该使用 Redisson 锁吗?像这样的异步工作的最佳匹配是什么?

Avi*_*rmi 5

正如 zapl 所提到的,Java 文档表明这是 Java 锁的正确行为。在Reddison 的 GitHub 页面上讨论了这个问题后,似乎 Redisson Lock 不是为此而设计的,并且 Redisson Semaphore 将很快支持异步操作。

同时,我计划分配一个线程来执行所有锁定和解锁。由于 Redisson 支持异步、非阻塞调用,所以这个解决方案目前看来是合理的。