A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 谭荣强 高级黑马   /  2014-4-16 23:01  /  863 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

老毕说while循环中,线程被唤醒之后会重新判断标记,为什么不会往下执行,而是返回去判断标记?,为什么if会往下执行?
public synchronized void consume() {                 
                while(!flag){
                        try {
                                wait();//t1线程等待,t2线程等待。
                        } catch (InterruptedException e) {                                 
                                e.printStackTrace();                         
                        }
                }

3 个回复

倒序浏览
本帖最后由 月光海 于 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.                 }
复制代码
回复 使用道具 举报
是么?你说是的执行while的{}中的wait后的代码,还是{}后的代码,
如果是{}中的,就是唤醒后,接着走,不去判断flag。等{}中的代码都结束后,才会返回继续判断的
回复 使用道具 举报
明白了,我理解错了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马