我有两个线程,在一个线程中我设置了静态变量,在另一个线程中,我通过函数检查静态变量,如下所示:
Test test= new Test();
while(!Temp.isVarSet()){
}
System.out.println("Variable set");
但是这段代码会卡住——不会执行println语句。但是下面的代码可以正常工作。
Test test= new Test();
while(!Temp.isVarSet()){
System.out.println("I am still here");
}
System.out.println("Variable set");
临时类
public class Temp {
private volatile static boolean varSet=false;
public synchronized static void setVarSet() {
Temp.varSet=true;
}
public synchronized static boolean isVarSet() {
return Temp.varSet;
}
}
测试类
public class Test{
public Test() {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
Model model= new Model();
View view = new View();
Controller controller=new Controller(model, view);
Temp.setVarSet();
...
}
});
}
}
什么可能是原因?我把方法isVarSet()设置为同步的,但并没有起到作用。
编辑 这段代码也有效。
Test test = Test()
while(!Temp.isVarSet()){
Thread.sleep(100);
}
setVarSet()
函数? - Brajrun()
方法被调用了吗?你是否在那里设置了断点并检查了它在两种情况下是否到达了? - Avi