【发布时间】:2017-11-03 09:10:38
【问题描述】:
当我设置数字[0] = 10 时,我的循环没有停止,当按下 jbutton 时,while 循环的线程看不到正在更改的数字,我该如何解决这个问题?我相信线程被阻塞了。
public class A{
private int[] number = new number[1];
private number_game gui;
public A(){
}
public void thread_loop(){
gui = new number_game();
gui.the_game(number);
Thread nums = new Thread(){
public void run(){
while(number[0]!= 10){
if(number != 10)
System.out.println("wrong number")
}
};nums.start();
}
}
}
public class number_game extends Jframe{
......
public number_game(){}
/ creating gui
public void the_game(int [] guess){
.............
checkguess.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e){
guess[1] = 10;
dispose();
}
});
}
}
public class main{
public static void main(String[]args) {
A nums_play = new A();
nums_play.thread_loop();
}
}
【问题讨论】:
-
对共享变量(本例中为数字)的访问应该是同步的。
-
或使用 AtomicInteger 代替数组
-
同步函数?
-
不是带有循环的整个函数;只有对数字的访问。或者创建一个 getNumber 和 setNumber 并将它们声明为同步。不过使用 AtomicInteger 会更简单、更快。
-
明白了!我试试看
标签: java multithreading user-interface awt edt