s****i 发帖数: 857 | 1 最近写了个代码学习一下外部类,内部类使用.一直有奇怪的问题没解决,这个胸闷啊
。用的是Eclipse,java。
代码结构式:
定义一个外部类whiletest,有一个boolean型的成员变量testhappen。定义一个内部类
Timer,内部类作为单独的线程每隔500ms改变一下testhappen的值(true/false)。
同时外部类的实例化对象调用print()是个死循环,一直打印testhappen的值。
按理说应该是当testhappen被Timer变为true之后,print()有输出;变为false之后,
print()没有输出。可是我运行时就是没有print()的输出。
奇怪的是什么,我在print()里面设置一个断电,debug调试的时候竟然能停下来。
总之就是正常全速运行不好使,debug没问题。
这个问题真是个小虫子,难受啊。
//Outerclass
public class whiletest {
boolean testhappen = true;
int i = 0;
void print(){
while(true) //Infinity loop
{
if(testhappen)
{
System.out.println("testhappen: "+testhappen);
testhappen = false;
}
}
}
//Innerclass to set testhapppen
public class timer extends Thread{
public void run(){
System.out.println("timer started");
while(true)
{
try {
sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
testhappen = true;
try {
sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
testhappen = false;
}
}
}
public static void main ( String[] args )
{
whiletest test = new whiletest(); //
test.new timer().start(); //Start timer;
test.print();
}
} |
g*****g 发帖数: 34805 | 2 Add a volatile to your boolean or use AtomicBoolean. |
s****i 发帖数: 857 | 3 Problem solved!
【在 g*****g 的大作中提到】 : Add a volatile to your boolean or use AtomicBoolean.
|
N*n 发帖数: 456 | 4 把程序弄成死循环?不是什么好习惯吧。。
【在 s****i 的大作中提到】 : 最近写了个代码学习一下外部类,内部类使用.一直有奇怪的问题没解决,这个胸闷啊 : 。用的是Eclipse,java。 : 代码结构式: : 定义一个外部类whiletest,有一个boolean型的成员变量testhappen。定义一个内部类 : Timer,内部类作为单独的线程每隔500ms改变一下testhappen的值(true/false)。 : 同时外部类的实例化对象调用print()是个死循环,一直打印testhappen的值。 : 按理说应该是当testhappen被Timer变为true之后,print()有输出;变为false之后, : print()没有输出。可是我运行时就是没有print()的输出。 : 奇怪的是什么,我在print()里面设置一个断电,debug调试的时候竟然能停下来。 : 总之就是正常全速运行不好使,debug没问题。
|
s****i 发帖数: 857 | 5 那请问JAVA里像我这种程序怎么避免死循环?谢谢]
【在 N*n 的大作中提到】 : 把程序弄成死循环?不是什么好习惯吧。。
|
N*n 发帖数: 456 | 6 你那程序我还看不太懂,不过,如果我要改会设一个足够大的循环次数数,或者有一个
输入可以把循环停下来。。
【在 s****i 的大作中提到】 : 那请问JAVA里像我这种程序怎么避免死循环?谢谢]
|