黑马程序员技术交流社区
标题:
多线程问题
[打印本页]
作者:
学习代码
时间:
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