从两个Main类中访问Java访问单例类的实例

23 浏览
0 Comments

从两个Main类中访问Java访问单例类的实例

package Test;
public class SingleObject {
   //创建SingleObject对象
   private static SingleObject instance = null;
   public String msg = "1";
   //将构造函数设为私有,以防止此类被实例化
   private SingleObject(){}
   //获取唯一可用的对象
   public static SingleObject getInstance(){
       if(instance!=null){
       }else{
           instance = new SingleObject();
       }     
       return instance;
 }
}
package Test;
public class Main1 {
     public static void main(String[] args) {
         SingleObject object  = null;
         while(true){
             object = SingleObject.getInstance();
             object.msg = "2";
             System.out.println(object.msg); //输出为2
         }
     }
 }

\n


\n

import SingleObject.*;
public class Main2{
   public static void main(String[] args) {
          //这里创建了一个新的实例
          SingleObject object = SingleObject.getInstance();
          //输出为1
          System.out.println(object.msg);
    }
}

\n编译完Main1和Main2之后

\n

    \n

  1. 我运行Main1 - 它将继续运行并更新变量msg为\"2\" [ 这里创建了SingletonObject类的实例 ]
  2. \n

  3. 然后我运行Main2。但是这里创建了SingleObject类的新实例。所以我得到的输出是\"1\"。根据单例设计模式,当我运行Main2时应该获得在Main1中创建的实例,为什么Main2会创建新的SingletonObject实例?
  4. \n

0
0 Comments

当我们运行两个完全独立的程序时,它们在两个完全独立的JVM中运行。单例是在它所在的JVM中的单例。JVM之间没有共享内存,它们相互独立。

我理解的情况是当在两个不同的JVM中运行时,它会失败。如果是这种情况,如何处理呢?有什么建议吗?

如果状态必须在多个程序之间共享,通常会将该状态存储在一个中央位置,通常是数据库中。

因此,我们无法直接在两个JVM之间传递任何数据。谢谢帮助 🙂

0