gpt4 book ai didi

multithreading - 与 Java 7 不兼容

转载 作者:行者123 更新时间:2023-12-04 06:41:07 25 4
gpt4 key购买 nike

对于我的生活,我无法弄清楚为什么这个程序在 Java 7 中不起作用。我在使用 Java 6 时运行它没有任何问题,但是一旦我在 Java 7 中运行它,它就不起作用了。不工作。

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class HelloWorld implements ActionListener {

JButton button;
boolean state;

public HelloWorld(){
init();
state = false;
System.out.println("state - "+state);

while (true){
if (state == true){
System.out.println("Success");
}
}
}

private void init(){
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
button = new JButton("Button");
button.addActionListener(this);
frame.add(button);
frame.pack();
frame.setVisible(true);
}

@Override
public void actionPerformed(ActionEvent e) {
JButton source = (JButton)e.getSource();

if (source == button){
state = !state;
System.out.println("state - "+state);
}
}

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
new HelloWorld();
}

}

使用 Java 6,如果我按下按钮,它将打印出短语“Success”,直到我再次按下按钮。使用 Java 7 注册按钮被按下并且状态值更改为 true,但是短语“Success”从未被打印出来。怎么回事?

最佳答案

在字段声明中添加volatile

如果没有volatile,则不保证字段中的更改在其他线程上可见。
特别是,JITter 可以自由地相信该字段在主线程上永远不会更改,从而允许它完全删除 if

关于multithreading - 与 Java 7 不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12810627/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com