wait()只有要求必须放在同步代码块或同步函数里吧
解决方案 »
- 求助,C#如何通过串口写汉字到LED显示屏?有VB源码。全部身家相送
- 急需一个正则表达式(java),只允许显示数字或带有小数点后两位数字的匹配
- Cannot forward after response has been 问题
- [求助]数据结构问题!!!大家帮忙!!小弟感激!!
- JTextArea中的滚动条问题
- JTable表怎么在表格中保存正在编辑的数据
- 请教:带客户端程序的applet怎样访问另一台机器上的服务器端。
- 哪位高手有用java swing做的应用程序显示水晶报表的例子吗给一个看看,谢谢
- 请教:基于GUI的java小程序
- 我服了!!难以想象!!about JApplet小程序!!卖血送分!!
- java
- java TextArea 中如何分行显示多行字符串
而你如果在while外面进行等待,基本上不能对程序进行控制。通常,你都需要分析或者控制循环里数据的执行情况。
如果你的wait放在循环里,你就可以看到让循环停下来,让你看个清楚。如果放到外面,循环都执行完了。你到外面等上(wait)一百年,你也看不到你想看的情况。
2、放在while里面,是防止出于waiting的对象被别的原因调用了唤醒方法,但是while里面的条件并没有满足(也可能当时满足了,但是由于别的线程操作后,又不满足了),就需要再次调用wait将其挂起。
3、其实还有一点,就是while最好也被同步,这样不会导致错失信号。希望下面的文章对您有帮助:
http://www.lantaozi.com/article/52217def0634c98c16000002
wait就是等待嘛,那为什么要等呢,那是比如你监视的端口或其它任务还没来,所以要等。就像一个狙击手,事先埋伏好,等有人来时就开枪,再来一个时再开枪。
没人来时就要等,
直到任务完成或其它中断任务的情部分发生。
synchronized (obj) {
while (<condition does not hold>)
obj.wait();
... // Perform action appropriate to condition
}
如果是if,判断一次就完了,就木有while科学了。
if(等待的条件) {
wait();
}
do somethingwhile()等待的条件 {
wait();
}
do somethingif和while有什么区别呢。
一个只执行一次,一个等到条件满足为直。
根据实际需求而定。
比如多线程读写同一个文件吧。
要写入文件。
当用if时,发现有其它线程在读,,执行一次就拜拜了。
如果是while,我可等,等到都没有读写了,本线程在写入,其它时候都睡觉。