黑马程序员技术交流社区
标题:
多线程小问题
[打印本页]
作者:
黑马刘岩
时间:
2012-12-27 15:16
标题:
多线程小问题
/*
需求:创建两个线程,和主线程交替运行
*/
class Demo extends Thread
{
Demo(String s)
{
super(s);
}
public void run()
{
for (int x=0;x<60 ;x++ )
{
System.out.println(Thread.currentThread().getName()+"is running"+x);
}
}
}
class ThreadDemo
{
public static void main(String[] args)
{
Demo d=new Demo("线程1");
Demo d1=new Demo("线程2");
d.start();
d1.start();
for (int y=0;y<60 ;y++ )
{
System.out.println("Thread main is running!");
}
}
}
复制代码
我写的多线程有问题吗?为啥有时结果不会交替运行呢?
作者:
netboy032
时间:
2012-12-27 15:29
没有什么问题啊,结果又不是一定会交替运行的。可能某个线程获得了执行权,但还是处在等待状态啊,
它没有抢过其他的线程,或者cpu决定处理某个线程多一点,处理某个线程少一点这也是有可能的啊。
作者:
黑马刘岩
时间:
2012-12-27 15:52
辛攀 发表于 2012-12-27 15:29
没有什么问题啊,结果又不是一定会交替运行的。可能某个线程获得了执行权,但还是处在等待状态啊,
它没有 ...
哦,这样啊,结果太整齐,难免心虚,你懂得~
作者:
黄锦成
时间:
2012-12-27 17:55
有交替啊,但是不是很明显,数值大点的话就能看得更清楚点
作者:
张会文
时间:
2012-12-29 21:33
每次程序运行都是先运行主进程,即main方法所在线程,之后CPU会根据资源在几个线程之间切换,程序在不同的计算机运行或在同一台计算机反复运行的结果不尽相同,输出的结果依赖于当前CPU的使用情况,所以不要烦恼了,如果想交替的话就设置一下休眠时间吧
作者:
冉世友
时间:
2012-12-29 22:12
这个是三个线程争夺CPU的控制权导致的,有的执行时间多,有的少
把数弄大点就好看多了
作者:
yuchen208
时间:
2012-12-30 10:33
写个等待sleep
作者:
韩俊杰
时间:
2012-12-30 11:50
你的程序没有问题,结果不是交替运行这说明某一线程没有抢到执行权,这很正常,要想使程序交替运行,你需要使用等待唤醒机制
作者:
cyh8807
时间:
2012-12-30 13:11
你本身的代码没有任何问题,是可以实现交替运行的,多线程的运行行为看做是互相抢夺CPU的执行权,
谁抢到执行权,谁就执行,某一个时刻只能有一个程序在运行
如果你看不到交替运行,建议在第一个线程开启后,让它slee()一段时间:
下面是我给加的一段代码,希望对你有帮助;
class ThreadDemo
{
public static void main(String[] args)
{
Demo d=new Demo("线程1");
Demo d1=new Demo("线程2");
d.start();
try{Thread.sleep(20);}catch(InterruptedException e){e.printStackTrace();}
d1.start();
for (int y=0;y<60 ;y++ )
{
System.out.println("Thread main is running!");
}
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2