Java 我怎么知道馆长InterProcessSemaphoreUnitex在丢失后是否被重新收购?

Java 我怎么知道馆长InterProcessSemaphoreUnitex在丢失后是否被重新收购?,java,mutex,apache-zookeeper,apache-curator,Java,Mutex,Apache Zookeeper,Apache Curator,我正在使用进程间SemaphoreUnitex来确保我的应用程序进程始终是单实例的。互斥锁有时会由于暂时的网络错误或应用程序暂停(例如,由于GC)而丢失。 我正在使用重试策略,以便进程可以尝试重新获取锁。如果无法在(比如)5分钟内重新获取锁,我希望我的应用程序进程退出 配方的文档表明我们可以监听ConnectStateChange事件。事件丢失表明与zookeeper的连接已丢失,因此进程也失去了锁。 这样,进程就可以检测是否丢失了锁 进程如何检查是否成功重新获取锁?我在互斥体上找不到任何可以提

我正在使用
进程间SemaphoreUnitex
来确保我的应用程序进程始终是单实例的。互斥锁有时会由于暂时的网络错误或应用程序暂停(例如,由于GC)而丢失。 我正在使用重试策略,以便进程可以尝试重新获取锁。如果无法在(比如)5分钟内重新获取锁,我希望我的应用程序进程退出

配方的文档表明我们可以监听ConnectStateChange事件。事件丢失表明与zookeeper的连接已丢失,因此进程也失去了锁。 这样,进程就可以检测是否丢失了锁


进程如何检查是否成功重新获取锁?我在互斥体上找不到任何可以提供此信息的方法。可疑有用的“isAcquiredInThisProcess”方法并没有真正为我提供这些信息。

我不确定您所说的retryPolicy是什么意思,一些curator对象具有重试策略(例如)


我不知道如何将它与
进程间SemaphoreMutex
一起使用,但是进程间SemaphoreMutex有一个
获取(长时间,时间单位)
方法,使用它5分钟并不能解决您的问题?

我不确定您所说的retryPolicy是什么意思,一些策展人对象有一个重试策略(例如)


我看不出你是如何将它与
进程间SemaphoreMutex
一起使用的,但是进程间SemaphoreMutex有一个
获取(长时间,时间单位)
方法,使用它5分钟并不能解决你的问题?

你的意思是你希望策展人自动重新获取信号量吗?我认为,如果应用程序没有显式调用InterProcessSemaphoreUnitex#acquire(其返回结果将让您知道是否已成功获取信号量),就不可能重新获取信号量。@Aeham我假设进程将尝试自动重新获取锁。关于这一点的文档似乎有点单薄。或者我没有在正确的地方搜索!你是说你想让馆长自动重新获取信号灯?我认为,如果应用程序没有显式调用InterProcessSemaphoreUnitex#acquire(其返回结果将让您知道是否已成功获取信号量),就不可能重新获取信号量。@Aeham我假设进程将尝试自动重新获取锁。关于这一点的文档似乎有点单薄。或者我没有在正确的地方搜索!你是说你想让馆长自动重新获取信号灯?我认为,如果应用程序没有显式调用InterProcessSemaphoreUnitex#acquire(其返回结果将让您知道是否已成功获取信号量),就不可能重新获取信号量。@Aeham我假设进程将尝试自动重新获取锁。关于这一点的文档似乎有点单薄。或者我没有在正确的地方搜索!