无法在单台机器上运行的多个jar中共享单例实例

时间:2016-10-14 06:32:29

标签: java jar jvm singleton

我现在有点困惑,我有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();
            }
     }
}

2 个答案:

答案 0 :(得分:1)

如果您使用四个不同的java命令运行四个jar,那么这将在您的机器中设置四个不同的Java虚拟机(JVM):单例在每个JVM中是唯一的(不考虑可能使主题复杂化的类加载器设置)。

答案 1 :(得分:0)

  

这4个罐子都是可运行的罐子,都有主要的方法。

如果要使用单例,则必须在同一JVM中运行它们。写一个包装器main来调用每个罐子的主管。如有必要,在单独的线程中。