gpt4 book ai didi

java - 如何只允许在服务器上创建 1 个 Java 信号量?

转载 作者:行者123 更新时间:2023-11-29 09:01:47 25 4
gpt4 key购买 nike

这类似于 How do I allow only 1 named Semaphore to be created on a server?但我在这里问的是 Java。

我想在我的 Java 应用程序中创建一个信号量,如果应用程序的另一个实例正在运行并且已经创建了信号量,则创建将失败(有一个明显的异常(exception))。所以每台服务器只有一个。

我希望在整个服务器上只保留一个,而不仅仅是 JVM。但我不希望它跨多个服务器(或虚拟机)。即我希望该应用程序能够在 2 个不同的服务器上运行。

这可能吗?如果是,怎么办?

最佳答案

你可以在/tmp目录下写一个mywebapp.lock文件,检查这个文件是否存在。

这是您可以使用的一些代码之王(未经测试):

假设 applicationFileLock 是一个 FileLock,它将在应用程序执行期间持有锁。您可以在应用程序启动期间执行以下代码:

FileOutputStream fos = new FileOutputStream(new File(System.getProperty("java.io.tmpdir"),"mywebapp.lock"));
try {
applicationFileLock = fos.getChannel().tryLock();
if (fileLock == null) {
throw new AlreadyStartedApplicationException("Cannot ...");
}
} catch (IOException e) {
// handle or rethrow.
}

确保在应用程序结束时使用 applicationFileLock.release() 释放锁。

关于java - 如何只允许在服务器上创建 1 个 Java 信号量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16990241/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com