我有一个类(A类)有一些用法,其中一个是存储一个变量。然后我尝试从Class B为此变量设置一个值,并从Class 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();
答案 0 :(得分:3)
对于跨线程安全,您应该设置共享状态volatile
。
private volatile static Config cfg;