我正在尝试使用while语句来代替等待,因为我个人在使用wait时会遇到更多麻烦。
当我专门使用C ++时,这已经足够了
while(!condition){}
条件要么由a填充 外部线程,外部api 或者如果我想要定时等待 我会做一些相当于
的事情double start = System.currentTimeMillis();
while(System.currentTimeMillis() - start < 1000){}
这在c ++中运行良好,但这种方法在java中并不起作用(至少我尝试实现它的方式)。即使我知道病情已经填满,该计划也处于停滞状态。
但我注意到,如果我有一个while循环运行一个简单的任务,它确实有效
JTextArea msgBox = new JTextArea();
while(!condition){
msgBox.append("");
}
有谁知道为什么只添加一个小小的琐碎任务会产生如此大的影响?我相信理解这一点有助于更好地阐明初学者程序员在while循环中究竟发生了什么。
答案 0 :(得分:4)
System.currentTimeMillis()
returns the time since Jan 1, 1970 UTC,永远不会*&lt; 1000
*假设您的系统时间正确
答案 1 :(得分:3)
condition
是一个易变的变量吗?如果没有,那么当线程A更新变量时,Java语言规范不保证在线程B看到更改之前将经过多长时间。在某些架构上,它可能需要永远。
当你调用msgBox.append(“”)时,很可能会调用Java同步原语,这些原语可以使condition
的先前更新对调用线程可见。