我想创建一个类的单个实例。如何在Java中创建一个类的单个实例?
答案 0 :(得分:18)
要创建类的真正单个实例(暗示JVM级别的单例),您应该使您的类成为Java enum
。
public enum MyClass {
INSTANCE;
// Methods go here
}
单例模式使用静态,因此在单元测试时通常会导致严重破坏。
Joshua Bloch的Effective Java的第3项对此进行了解释。
答案 1 :(得分:10)
非常基本的单身人士。
public class Singleton {
private static Singleton instance;
static {
instance = new Singleton();
}
private Singleton() {
// hidden constructor
}
public static Singleton getInstance() {
return instance;
}
}
你也可以使用懒惰的持有者模式
public class Singleton {
private Singleton() {
// hidden constructor
}
private static class Holder {
static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return Holder.INSTANCE;
}
}
在访问getInstance()之前,此版本不会创建单例实例,但由于JVM /类加载器处理内部类创建的方式,因此保证只能调用一次构造函数。
答案 2 :(得分:5)
答案 3 :(得分:1)
In Java, how can we have one instance of the BrokerPacket class in two threads?
这样所有线程都会更新将不同的BrokerLocation存储在一个位置数组中。 例如:
class BrokerLocation implements Serializable {
public String broker_host;
public Integer broker_port;
/* constructor */
public BrokerLocation(String host, Integer port) {
this.broker_host = host;
this.broker_port = port;
}
}
public class BrokerPacket implements Serializable {
public static BrokerLocation locations[];
}