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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 橸瑩膤漃寞林 中级黑马   /  2014-4-13 21:10  /  2066 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 橸瑩膤漃寞林 于 2014-4-15 13:54 编辑

public class ThisLockDemo {        
        public static void main(String[] args) {
                Ticket2 t = new Ticket2();
               
                Thread t1 = new Thread(t);
                Thread t2 = new Thread(t);
               
                t1.start();
                try {
                        Thread.sleep(10);
                } catch (Exception e) {
                        // TODO: handle exception
                }
                t.flag = false;
                t2.start();
        }

}

class Ticket2 implements Runnable{
        private int tick = 100;
        boolean flag = true;
        public void run() {
                if (flag) {
//为什么用while,为什么括号里是true ,而不能写false
                        while(true){
                                synchronized (this) {
                                        if (tick>0) {
                                                try {
                                                        Thread.sleep(10);
                                                } catch (Exception e) {
                                                }
                                                System.out.println(Thread.currentThread().getName()+"......code...."+tick--);
                                                
                                        }
                                                
                                        }
                                
                        }
                }
                else
                        while(true)//为什么用while
                        show();
                        
               
        }
        
        public synchronized void show(){
                if (tick>0) {
                        try {
                                Thread.sleep(10);
                        } catch (Exception e) {
                        }
                        System.out.println(Thread.currentThread().getName()+"......show...."+tick--);
                }
                        
                }
        
}

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

9 个回复

倒序浏览
因为条件为TRUE才会进入循环,false的话写的循环就没有意义了。一般条件是一个判断,true的话进入循环,否则就跳过循环了
回复 使用道具 举报
while循环特点: 先判断表达式 若为true就执行循环体,否则跳过循环体
回复 使用道具 举报
while(true)是为了进入循环.
而且你问的好像不是重点,这里2个while(true)都是单纯的循环.
这代码的主要是就synchronized 的使用就是锁进程.
你还你这代码有问题.真这样写CUP就等悲剧吧.

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
while 表示的是循环  如果while中表达式的值为true则执行循环体内的代码  如果是false则不执行循环体内的代码  此代码中while的作用是只是起到循环的作用  但是如果while中的值总为true  而且没有跳出循环的语句的话 就会产生无限循环  这点要注意  可以用break跳出

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 skyfly 于 2014-4-14 00:25 编辑

请用你稍微想一想,既然知道永久为false,你写的循环里边的代码能执行得到吗,换句话说你写得循环体代码有意义吗?

while()  括号里必须是boolean类型,可以是表达式,可以是不等式,可以是值,表达式有x > y、x == y、x && y、x || y;
例如如:while(true); whild(a=b+c); while(a<b);
1.while一般用于不清楚需要循环多少次的情况下 。
2.能用for循环的语句,必定也能换成while。   
3.但是for循环优点在于,语句运行完后会释放空间,
4.而while语句运行完后是没有释放的,要等到全部运行结束后。

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
while语句的一般形式为:
        while(表达式) 语句
其中表达式是循环条件,语句为循环体。
while先判断while中的表达式结果是否为true,true则执行循环体,执行结束之后再次判断,如果表达式结果为false则跳出循环。  
  while语句的语义是:计算表达式的值,当值为真(非0)时, 执行循环体语句。
使用while语句应注意以下两点。
1、 while语句中的表达式一般是关系表达或逻辑表达式,只要表达式的值为真(非0)即可继续循环。
2、循环体如包括有一个以上的语句,则必须用{}括起来,组成复合语句。

  
回复 使用道具 举报
while循环只能接受true和false两个参数,传入true循环会一直执行,false就不会执行,除非你传入一个boolean变量控制while循环的执行与停止,否者你直接传入一个false,毫无意义,因为循环内部的代码变成了没有用的代码
回复 使用道具 举报
如果非要出现false的字样,可以这么用:

while(!false)

...这么写,感觉莫名的蛋蛋的忧伤。。。
回复 使用道具 举报
while循环
    格式如下:
        初始化部分;
        while(判断部分){
            循环体部分;
            迭代部分;
        }
    其中初始化部分和迭代部分可以没有。如果有初始化部分,程序先执行初始化部分,再执行判断部分,如果为真值,则执行红色显示的部分(即执行循环体部分,如果有迭代部分,执行迭代部分),然后再执行判断部分,如果为真值,再执行红色显示的部分,直至判断部分运算的结果为假值结束循环
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马