我现在有点困惑,我有4个java编码的jar,它们应该共享同一个类的实例。 我已经实施了" Bill Pugh Singleton Implementation"在我的代码中。 问题是,当我运行这些罐子时,他们表明他们有不同的单例类实例。在一台机器上运行的jar有自己的JVM加载或什么?以下是我实施的内容。
public class MyProducer implements ProducerInterface{
private static KafkaProducer<String, byte[]> producer; // this variable should be shared among all jars.....
private MyProducer () {
logger.warn("Producer is called now.........");
setProducerConfigurations();
}
public static Producer getInstance(){
return SingletonProducer.INSTANCE;
}
private static class SingletonProducer{
private static final MyProducer INSTANCE = new MyProducer ();
}
}
现在使用的类具有如下代码:
public class MyProcessThread extends ProcessThread {
public static ProducerInterface producer;
@Override
public void run() {
if(producer==null){
producer= MyProducer .getInstance();
}
}
}
答案 0 :(得分:1)
如果您使用四个不同的java命令运行四个jar,那么这将在您的机器中设置四个不同的Java虚拟机(JVM):单例在每个JVM中是唯一的(不考虑可能使主题复杂化的类加载器设置)。
答案 1 :(得分:0)
这4个罐子都是可运行的罐子,都有主要的方法。
如果要使用单例,则必须在同一JVM中运行它们。写一个包装器main
来调用每个罐子的主管。如有必要,在单独的线程中。