gpt4 book ai didi

java - 单例变量不会跨系统持久存在

转载 作者:行者123 更新时间:2023-12-01 12:58:08 24 4
gpt4 key购买 nike

我正在尝试使用 Java 中的单例模式,但遇到了问题。我有一个单例 ClientCounter,我想跟踪另一个类 Client 的实例。

ClientCounter 只需在 Client 调用其 addClient() 方法时增加 count 即可实现此目的:

public class ClientCounter {

private int count = 0;

private static final ClientCounter counter = new ClientCounter();

public static ClientCounter getInstance() {
return counter;
}

public void addClient() {
count++;
}

public int getCount() {
return count;
}

}

我的客户端代码:

public class Client {

public static void main(String[] args) {

ClientCounter myCC = ClientCounter.getInstance();
myCC.addClient();

System.out.println("CC Count is " + myCC.getCount());

}

}

但是,我的 count 似乎并没有持续存在,因为当我尝试一个接一个地运行两个 Client(在单独的终端中)时,我的两者输出是:

CC Count is 1

我“做”单例是错误的,还是我的代码存在一些错误?

最佳答案

However, my count doesn't seem to be persisting, as when I try to run two Client's (in separate terminals)

根据定义,Singleton pattern将在整个系统中维护该对象的单个实例。在这种情况下,系统是您当前的应用程序,因此如果您多次执行它,则会有您的应用程序的多个实例,并且每个单例对象都与每个应用程序绑定(bind)。对于 Java 应用程序,每个 Java 应用程序都与 JVM 绑定(bind);这不适用于Web应用程序,其中Java应用程序是应用程序服务器,并且应用程序服务器与JVM绑定(bind)在一起(在Web应用程序中,单例的行为比这更复杂,但它超出了这个问题的范围/答案)。

如果您想在应用程序的多次执行中保留该值,您应该将数据存储在应用程序/终端通用的数据源中(可能在共享文件或数据库中),并从那里多次检索它次。但请注意,这不是单例的工作,使用这种方法可能会让事情变得过于复杂。

关于java - 单例变量不会跨系统持久存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23729871/

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