黑马程序员技术交流社区

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

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

谢谢  你  以后在写类名的时候会注意的
作者: 谜燕    时间: 2014-3-14 10:30
共同进步,你是第几期的?





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