我怎样才能让java等待

时间:2013-03-07 01:24:29

标签: java multithreading loops while-loop wait

我问了一个关于我的实际问题的问题,但没有出现解决方案,所以我会尝试更开放,如何让java等待某个输入?现在我有一个半无限的while循环,它查看一个变量,直到ActionEvent在另一个类中触发时才会更新。但是我读过关于线程和其他一些东西的内容,如果有人能详细说明这个话题,我很好奇吗?基本上我正在使用GUI,我的窗口会弹出并要求输入密码,当按下按钮时,会更改变量以退出循环。最奇怪的是它可以在学校的计算机上运行,​​但不适用于我自己的计算机。我甚至重新安装了我的JDK,但事实并非如此。它出现了它可能是一个速度问题,但是使用print语句我看到变量得到了更新,而我只是停下来看它。

private static boolean running=true;

while(running){
}

...

public void actionPerformed(ActionEvent e){
    String temp = new String("");
    for(int x=0;x<passwordInput.getPassword().length;x++)
        temp+=passwordInput.getPassword()[x];
    PWCoder.passwordCheck(temp);
}

...

public static void passwordCheck(String pass){
if(pass.equals(password)){
    correctPW = true;
}
else if(pass.equals(overKey))
    PWCoder.override(password);
doneRunning();
}

...

public static void doneRunning(){
    running = false;
}

有代码可以提供帮助。应该按它执行的顺序或多或少,但它不是所有的一个块,是多个类和所有。我尝试使用volatile,它没有做任何事情。

1 个答案:

答案 0 :(得分:1)

如果您在多个线程中更新并读取变量(可能是原始值),您是否使用 volatile 关键字声明了该变量。为了优化,你的线程可能已缓存了值而没有读取更改的值--- volatile强制JVM每次都读取变量而不缓存它。

除了声明变量volatile之外,您可以考虑使用同步块来读取/写入变量(如果不是原始字段,并且需要的不仅仅是原子操作来读取/写入值。) / p>

在更新的代码示例中,运行密码变量应声明为 volatile ,如下所示:

private static volatile boolean running = true;