由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Java版 - 很简单的代码,问题求助。太迷惑了
相关主题
一个比较菜鸟的数据输入的验证问题..谢谢..这道题该走什么路
请教大家:如何modify java code in order to compileRe: 谁有Java或Oracle的毒招 ?
这个有 bug 吗一个Java程序员的话(2)
这个Timer不退出是怎么回事儿?Re: connection pool
两个很基本的JAVA问题Help: 小程序挑错
问个Thread 的问题,java certificate里的Stupid IBM JDK
Linux 下用 gdb 如何debug java?faint, unreachable statement in java
Timer and TimerTaskCan Java thread return a value?
相关话题的讨论汇总
话题: testhappen话题: timer话题: whiletest话题: print话题: true
进入Java版参与讨论
1 (共1页)
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里像我这种程序怎么避免死循环?谢谢]
1 (共1页)
进入Java版参与讨论
相关主题
Can Java thread return a value?两个很基本的JAVA问题
why is this necessary?问个Thread 的问题,java certificate里的
请问一个有关选择数据结构的问题Linux 下用 gdb 如何debug java?
问几个土问题Timer and TimerTask
一个比较菜鸟的数据输入的验证问题..谢谢..这道题该走什么路
请教大家:如何modify java code in order to compileRe: 谁有Java或Oracle的毒招 ?
这个有 bug 吗一个Java程序员的话(2)
这个Timer不退出是怎么回事儿?Re: connection pool
相关话题的讨论汇总
话题: testhappen话题: timer话题: whiletest话题: print话题: true