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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 袁野 黑马帝   /  2012-1-15 20:45  /  1914 人查看  /  4 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 袁野 于 2012-1-16 00:37 编辑

public class Demo0400
{
        public static void main(String[] args)
        {
                Text0400 t = new Text0400();
                Thread th1 = new Thread(t, "1111");
                Thread th2 = new Thread(t, "2222");
                th1.start();
                th2.start();
        }
};

class Text0400 implements Runnable
{
        private int        tick        = 100;
        Object obj = new Object();

        public void run()
        {
                while (true)// 求这行代码的作用 ?
                {
                        synchronized (obj) //为什么需要上面加个while (true) ;
                       
                        {
                                if (tick > 0)
                                {
                                        try
                                        {
                                                Thread.sleep(100);
                                        }
                                        catch (InterruptedException e)
                                        {
                                                e.printStackTrace();
                                        }
                                        System.out.println(Thread.currentThread().getName()
                                                        + "tick" + tick--);
                                }
                        }
                }
        }
};

while(true)的作用?

评分

参与人数 1技术分 +1 收起 理由
祁焱 + 1 加油!!!

查看全部评分

4 个回复

倒序浏览
while(true),不断循环,如无退出就是死循环了。while,当条件真时循环,由于永远是true,所以不断循环。

点评

即使不加上while也该是俩线程相互抢夺cpu啊 为什么我想的是错误的 纠结在这  发表于 2012-1-15 23:22
加上while ()和不加上while() 俩个运行不一样 有while 运行的是俩线程 没while 运行是一个线程 我就是不明白 while 在这里是判断什么 的 我想不通  发表于 2012-1-15 23:21

评分

参与人数 1技术分 +1 收起 理由
祁焱 + 1 赞一个!

查看全部评分

回复 使用道具 举报
这个奇怪了,死循环,可能是用来演示线程执行的优先的顺序,所有没有定义标记退出把,
一边用 boolean flag ;while(flag){程序段} 当if(tick <=0的时候)设flag为false

点评

哦似乎懂得了点。 我在慢慢捉摸下  发表于 2012-1-15 23:24

评分

参与人数 1技术分 +1 收起 理由
祁焱 + 1 赞一个!

查看全部评分

回复 使用道具 举报
"有while 运行的是俩线程 没while 运行是一个线程",并不是这样,new Thread--start();就运行一线程。
"即使不加上while也该是俩线程相互抢夺cpu",是的。
将代码“ if (tick > 0)”取消,while(true) 改为:while (tick > 0),这样易理解些。

点评

谢谢 完全懂得了 。。  发表于 2012-1-17 12:56
回复 使用道具 举报
System.out.println(Thread.currentThread().getName()+ "tick" + tick--);

如果不加while(true)这票只卖一次,这100张票还能卖的完吗?
“即使不加上while也该是俩线程相互抢夺cpu啊 为什么我想的是错误的 纠结在这”
至于这个问题,毕老师只是为了更容易的看出两个线程在抢占资源,才能体现出抢占资源存在的危害。

点评

谢谢 我现在懂得了  发表于 2012-1-17 12:57

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马