Java 使用静态类作为存储
我有一个类(类a),它有一些用法,其中之一就是存储一个变量。然后我尝试从类B中为这个变量设置一个值,并从类C中检索该值 每个类位于不同的包中,类A和类B用作库。问题是,当我检查C类中的值时,该值为null 如何才能做到这一点 代码: A类: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
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!