java - 创建单例时出现问题

标签 java

我正在尝试创建一个 Singleton 类,该类将从其他两个类访问。任何人都可以告诉我以下代码有什么问题吗?我就是想不通!

import java.util.LinkedList;

public class MessageQueue {

    private static final LinkedList<ServerDataEvent> queue = new LinkedList<ServerDataEvent>();;

    private static MessageQueue messageQueue = null;

    /** A private Constructor prevents any other class from instantiating. */
    private MessageQueue() {
    }

    /** Static 'instance' method */
    public static MessageQueue getInstance() {
        if (MessageQueue.messageQueue == null) {
            System.out.println("Creating MessageQueue instance.");
            MessageQueue.messageQueue = new MessageQueue();
        }
        return MessageQueue.messageQueue;
    }

    public Object clone() throws CloneNotSupportedException {
        throw new CloneNotSupportedException();
    }
}

我正在从其他类访问单例对象,如下所示:

MessageQueue messageQueue = MessageQueue.getInstance();

没有错误,但是

System.out.println("Creating MessageQueue instance.");

每当我这样做时就会被处决

MessageQueue messageQueue = MessageQueue.getInstance();

编辑 1

import java.util.LinkedList;

public class MessageQueue {

    private static final LinkedList<ServerDataEvent> queue = new LinkedList<ServerDataEvent>();;

    private static final MessageQueue messageQueue = new MessageQueue();

    /** A private Constructor prevents any other class from instantiating. */
    private MessageQueue() {
        System.out.println("problem...");
    }

    /** Static 'instance' method */
    public static MessageQueue getInstance() {
        return MessageQueue.messageQueue;
    }

    public Object clone() throws CloneNotSupportedException {
        throw new CloneNotSupportedException();
    }
}

最佳答案

首先,您没有指定遇到的任何错误。如果您想获得帮助,您应该向我们提供尽可能多的信息。

其次,在 Java 中创建单例的最佳万无一失的方法是:

public enum MySingleton {
    INSTANCE;

    //whatever methods you want to implement
}

您可以像这样访问它:MySingleton.INSTANCE.whatever()

关于java - 创建单例时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6510790/

相关文章:

java - 获取从文件管理器中选择的文件的文件路径

java - 在 Java 中,如何使用 posix 通配符语法从多个文件中读取数据?

java - 暂停方法的执行,直到回调完成

java - 错误: Not supported: indent-number when using jaxb2-maven-plugin with jdk8

java - 为什么Java编译器允许在throws部分列出方法不可能抛出的异常

java - Java : cannot find symbol when compiling

java - 如何使用索引文件来提高大文件中的搜索速度?

java - 使用特定的静态方法而不是终端中的 main 运行 Jar 文件

java - 从 map 同步设置还是从同步 map 设置?

java - playframework java 异步方法调用