Java 使用静态类作为存储

Java 使用静态类作为存储,java,class,object,Java,Class,Object,我有一个类(类a),它有一些用法,其中之一就是存储一个变量。然后我尝试从类B中为这个变量设置一个值,并从类C中检索该值 每个类位于不同的包中,类A和类B用作库。问题是,当我检查C类中的值时,该值为null 如何才能做到这一点 代码: A类: private static Config cfg; public static void saveCFG(Config CFG) { cfg = CFG; } public static Config retrieveCFG() { ret

我有一个类(类a),它有一些用法,其中之一就是存储一个变量。然后我尝试从类B中为这个变量设置一个值,并从类C中检索该值

每个类位于不同的包中,类A和类B用作库。问题是,当我检查C类中的值时,该值为null

如何才能做到这一点

代码:

A类:

private static Config cfg;

public static void saveCFG(Config CFG) {
   cfg = CFG;
}

public static Config retrieveCFG() {
   return cfg;
}
类B是一个GUI,当按下按钮时,它调用saveCFG方法:

ClassA.saveCFG(config);
C类有一个线程不断地检查这个值:

final Thread t = new Thread(new Runnable() {
    @Override
    public synchronized void run() {
        while (true) {
            if (ClassA.retrieveCFG() != null) {
               System.out.println("Saved.");
            } else {
               System.out.println("Not saved.");
            }
            try {
               wait(3000);
            } catch (InterruptedException e) {
               e.printStackTrace();
            }
        }
   }
});
t.start();

为了跨线程安全,您应该设置共享状态
volatile

private volatile static Config cfg;

为了跨线程安全,您应该设置共享状态
volatile

private volatile static Config cfg;

为了跨线程安全,您应该设置共享状态
volatile

private volatile static Config cfg;

为了跨线程安全,您应该设置共享状态
volatile

private volatile static Config cfg;


请张贴您的密码。。。。从理论上讲,它可以工作。。。你从B得到结果了吗?这个问题可能是时间问题,你确定你在检索值之前设置了吗正如Danielson所说,我们需要设置一些代码和更多细节。您正在运行两个不同的jvm吗?在内部和应用程序容器中运行?因为每个类加载器都有静态变量。用一点代码编辑请发布您的代码。。。。从理论上讲,它可以工作。。。你从B得到结果了吗?这个问题可能是时间问题,你确定你在检索值之前设置了吗正如Danielson所说,我们需要设置一些代码和更多细节。您正在运行两个不同的jvm吗?在内部和应用程序容器中运行?因为每个类加载器都有静态变量。用一点代码编辑请发布您的代码。。。。从理论上讲,它可以工作。。。你从B得到结果了吗?这个问题可能是时间问题,你确定你在检索值之前设置了吗正如Danielson所说,我们需要设置一些代码和更多细节。您正在运行两个不同的jvm吗?在内部和应用程序容器中运行?因为每个类加载器都有静态变量。用一点代码编辑请发布您的代码。。。。从理论上讲,它可以工作。。。你从B得到结果了吗?这个问题可能是时间问题,你确定你在检索值之前设置了吗正如Danielson所说,我们需要设置一些代码和更多细节。您正在运行两个不同的jvm吗?在内部和应用程序容器中运行?因为每个类加载器都有静态变量。用一些代码编辑。哇,非常感谢,它工作得非常好!这是我第一次听到这个词,谢谢你@OldCurmudgeon!哇,非常感谢,它工作得非常好!这是我第一次听到这个词,谢谢你@OldCurmudgeon!哇,非常感谢,它工作得非常好!这是我第一次听到这个词,谢谢你@OldCurmudgeon!哇,非常感谢,它工作得非常好!这是我第一次听到这个词,谢谢你@OldCurmudgeon!