public class Main {
public static boolean isToggled = false;
public static boolean isClicking = false;
public static void main(String[] args){
while(true){
if(Main.isToggled && Main.isClicking){
System.out.println("Running");
}
}
}在我的主要课程中,我有两个值为false的公共静态布尔值。
如果两个布尔值都被另一个类设置为true,则会不断地检查while(true)循环。
但是,如果这两个条件都被设置为true,则不会发生任何事情。
如果向like循环添加了一个The语句,则like循环只起作用:
public class Main {
public static boolean isToggled = false;
public static boolean isClicking = false;
public static void main(String[] args){
while(true){
if(Main.isToggled && Main.isClicking){
System.out.println("Running");
}
else{
System.out.println("Idle");
}
}
}所以问题肯定是that循环。
将条件设置为true的类工作非常好。我已经通过删除while循环来测试这个问题,并在布尔值发生变化后打印它们的值。
我不明白,为什么第一段代码没有做它应该做的事情,而另一段添加了else语句的代码却做到了这一点。
复制代码以进行测试:
public class Main {
public static boolean isToggled = false;
public static boolean isClicking = false;
public static void main(String[] args) {
Thread changeBoolsT = new Thread(new Runnable() {
@Override
public void run() {
changeBools();
}
});
changeBoolsT.start();
while(true){
if(isToggled && isClicking){
System.out.println("OK");
break;
}
else{ // Remove this else statement
System.out.println("Waiting");
}
}
}
public static void changeBools(){
try{
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
isToggled = true;
isClicking = true;
}
}发布于 2022-09-24 16:13:33
JVM将优化您的代码,因为主线程中的值从未更改过。线程之间没有同步。在读取和写入变量时,需要使用synchronized块,或者将它们标记为volatile。每次访问volatile时,都会强制从内存中重新读取它们。
发布于 2022-09-24 16:17:27
我认为这不是您的循环,而是您试图访问主方法中的静态变量。解决方案是在main类中实例化一个main对象。
Main mainObj = new Main(); 那你的时候看起来就像
while(true){
if(mainObj.isToggled && mainObj.isClicking){
System.out.println("Running");
}
else{
System.out.println("Idle");
}
}https://stackoverflow.com/questions/73838679
复制相似问题