求教多线程

zhao 2013-06-23 03:03:46


package thread;
class MyThread extends Thread{
public MyThread(String name){
super(name);
}
public void run(){
System.out.println(getName() + " - Begin...");
for(int i = 0;i < 10;i++){
System.out.println(getName() + " - " + i);
try{
sleep(500);
}catch (InterruptedException e){

}
}
System.out.println(getName() + " - End...");
}
}
public class Test {


public static void main(String[] args) {
MyThread t1 = new MyThread("THread One");
MyThread t2 = new MyThread("THread Two");
t1.start();
t2.start();
}

}
本来是应该xxx one xxx two轮流打印的,但有时候会打印如下结果或者其他什么看上去不是很正常的结果是什么原因啊?
THread One - Begin...
THread One - 0
THread Two - Begin...
THread Two - 0
THread One - 1
THread Two - 1
THread One - 2
THread Two - 2
THread Two - 3
THread One - 3
THread One - 4
THread Two - 4
THread Two - 5
THread One - 5
THread Two - 6
THread One - 6
THread One - 7
THread Two - 7
THread Two - 8
THread One - 8
THread One - 9
THread Two - 9
THread Two - End...
THread One - End...
...全文
131 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
晓风吹雾 2013-06-24
  • 打赏
  • 举报
回复
线程本身就具有无序性,就像2个不懂事的孩子一样同时要抢一样东西,这样谁也说不准谁会抢到。 当时我们给孩子规矩,让他们按照我们的意愿去执行,那就不一样了,比如说让孩子A先拿,孩子B等待,等孩子A玩好了,通知孩子B,让孩子B玩,自己在等待,如此下去,不就实现了轮流的概念了。 上面是理论,实践就可以使用 object的wait和notify去实现。
无聊找乐 2013-06-23
  • 打赏
  • 举报
回复
线程是会互相争夺cpu的不知道吗
风之子1 2013-06-23
  • 打赏
  • 举报
回复
每个线程占用CPU的时间是不固定的,同样也不一定是相等的
花木兰1闪21A 2013-06-23
  • 打赏
  • 举报
回复
两个互不干扰的线程,可以考虑用锁
qianyecq 2013-06-23
  • 打赏
  • 举报
回复
本来就是两个互不干扰的线程,打印结果的顺序应该也是随机的,加个同步标识试试。
zhao 2013-06-23
  • 打赏
  • 举报
回复
线程1先开始运行的,两个线程干的又是同样的事,应该是线程1先结束吧,可为什么2先结束了,是不可能会被阻塞。
kunpp 2013-06-23
  • 打赏
  • 举报
回复
这个不会轮流打,哪个抢到线程打哪个,轮流打的话还叫什么多线程

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧