java - 单例类不起作用

标签 java singleton

<分区>

我正在尝试使 Clients 类成为单例,但它不起作用。这是我的类(class):

public class Clients {
    private static Clients instance = null;
    private ArrayList<Client> cList;

    private Clients() {
        cList = new ArrayList<Client>();
    }

    public static Clients getInstance() {
        if (instance == null) {
            System .out.println("created");
            instance = new Clients();
        }

        return instance;
    }

    public static ArrayList<Client> getcList() {
        return getInstance().cList;
    }

    public static void setcList(ArrayList<Client> cList) {
        getInstance().cList = cList;
    }
}

我在两个不同的类中获取这个实例(都有自己的主要功能)。在一个类中获取它的实例后,我在另一个类中获取它,但两个 tiare 仍在执行。

最佳答案

无论何时实现单例,getInstance() 方法都应该是线程安全的。

例如,

public static synchronized Clients getInstance()

……或者……

private static final Object INSTANCE_LOCK = new Object();

public static Clients getInstance() {
    synchronized(INSTANCE_LOCK) {
        if(instance == null) instance = new Clients();
    }
    return instance;
}

当然,如果您实际上是从两个不同的程序而不是两个不同的线程执行这段代码,您将有两个实例。我假设是前者,因为后者使您的问题变得荒谬。

我想我应该解释为什么这是荒谬的。

当您使用 main(String[] args) 方法执行 Java 程序时,您的所有类都会加载到 JVM 中。如果您随后执行另一个 程序,您将获得另一个 JVM 和所有关联类的另一个“副本”。因此,您有两个独立的单例——每个程序一个。两者之间不共享类。

关于java - 单例类不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22723647/

相关文章:

java - 可重入锁条件公平

java - 使用信号量的监控程序在java中无法按预期工作

java - GWT 项目中的单例

design-patterns - 单例有哪些特定的合法用途?

c++ - 与 get_instance() 分离的单例构造函数

jquery - 具有 AJAX 初始值设定项设计模式的 javascriptMVC 单例

java - 即使引用的类存在,也找不到符号

java - setText() 从数据库到 TextView

c# - ASP.NET 有没有办法获取所有单例?

java - 尝试在 GAE 中获取子对象时出现 JUDO ObjectNotFoundException