【发布时间】:2020-10-20 04:34:28
【问题描述】:
我正在使用 Mysql GET_LOCK 在分布式系统中实现锁定服务。在调用我的 getLock() 方法时,如果客户端获得了锁,我会在 DB 中创建一个条目,并在释放锁时删除该条目。
假设调用客户端将释放锁定一旦其目的服务。但是,我想确保在客户端不释放或未进行适当清理的情况下释放锁。
一种方法是在我的锁对象上使用 finalize 方法在调用 finalize 时释放它。然而它并不理想,增加了复杂性并且在 Java 9 中被弃用。我读到了 Phantom 引用,它比终结器更好,但它的复杂性也很高。我把它作为我最后的手段。
有没有更简单、更少依赖 JVM 的方法来处理这个用例?
【问题讨论】:
-
Java 是您的主要系统吗?如果是这样,它有一个丰富的锁定子系统。为什么需要将 DB 用于这些目的?
-
这很好。然而不幸的是,我们使用 java 7,目前对于我们的用例 mysql get_lock 就足够了,此时无法更改它。
-
有
Cleaner API,但仅从java-9开始。
标签: java garbage-collection finalizer finalize phantom-reference