黑马程序员技术交流社区

标题: 多线程问题 [打印本页]

作者: 谭荣强    时间: 2014-4-16 23:01
标题: 多线程问题
老毕说while循环中,线程被唤醒之后会重新判断标记,为什么不会往下执行,而是返回去判断标记?,为什么if会往下执行?
public synchronized void consume() {                 
                while(!flag){
                        try {
                                wait();//t1线程等待,t2线程等待。
                        } catch (InterruptedException e) {                                 
                                e.printStackTrace();                         
                        }
                }
作者: 月光海    时间: 2014-4-16 23:07
本帖最后由 月光海 于 2014-4-16 23:08 编辑

额,那这个就是while的用法了,while是一直执行到条件为false才会不再执行里面的语句,如果里面的线程醒来再去判断flag,如果条件还是true,那么他还会继续等待,你看下下面的代码,理解while的作用就明白了,if不是循环语句,执行完就继续执行,while是循环语句,所以必然会执行的
  1. int i=9;
  2.                 while(i>0)
  3.                 {
  4.                         i--;
  5.                 }
复制代码

作者: shi0000    时间: 2014-4-16 23:28
是么?你说是的执行while的{}中的wait后的代码,还是{}后的代码,
如果是{}中的,就是唤醒后,接着走,不去判断flag。等{}中的代码都结束后,才会返回继续判断的
作者: 谭荣强    时间: 2014-4-17 00:14
明白了,我理解错了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2