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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 学习代码 中级黑马   /  2014-3-14 09:06  /  1453 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Demo implements Runnable
{
        private int key =100;
        public void run()
        {        while(true)
                {if (key>0)
                {
                        System.out.println(Thread.currentThread().getName()+"::"+key);
                        key--;
                }
                }
        }
}
class  A
{
        public static void main(String[] args)
        {
                Demo d=new Demo();
                        Thread t1=new Thread(d);
                        Thread t2=new Thread(d);
                        Thread t3=new Thread(d);
                        Thread t4=new Thread(d);
                        t1.start();
                        t2.start();
                        t3.start();
                        t4.start();
        }
}为什么我把key--;写在下面却能输出四个100呢?请大家指教下

3 个回复

倒序浏览
我也是初学者,看了你的代码,给你提一点建议,类名不要只写一个大写字母,这样看着你很业余,一定要起几个字母的名字。while(true)的作用只是让使用run内部代码的线程活着,就是让t1到t4活着,而且当你在控制台运行时,打印的并不是400个,而只有100个,因为key是4个线程共享数据,当你运行完后,并没有出现结束的标记,我说的是控制台,这就是while(true)作用,之所以没有打印,是因为key已经小于0了,只是在判断能不能循环,所以不执行任何操作,只是没有输出语句。同时你也会发现,打印的数字有重复,这就是线程不同步。
回复 使用道具 举报
谜燕 发表于 2014-3-14 10:11
我也是初学者,看了你的代码,给你提一点建议,类名不要只写一个大写字母,这样看着你很业余,一定要起几个 ...

谢谢  你  以后在写类名的时候会注意的
回复 使用道具 举报
共同进步,你是第几期的?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马