这个多线程怎么无法正常运行?

pig882 2012-10-26 04:03:17
public class ThreadDemo9_1
{
public static void main(String args[])
{
new TestThread().start();

for(int i=0;i<10;i++)
{
System.out.println("main 线程运行");

}


}

}

class TestThread extends Thread
{
public void run()
{

for(int i=0;i<10;i++)
{
System.out.println("TestThread 线程运行");

}

}

}


这里的结果并非书上说的交替出现,而是先出现完所有 main 的,然后才出现所有的 TestThread的,

这是什么原因?

...全文
445 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
现在都是四核的时代了,一个破输出瞬间执行完,哪还能交替了。
sgyyz 2012-11-06
  • 打赏
  • 举报
回复
你的书是哪年的?机器那么不行,现在计算机处理能力都提升了,一个时间片内就可以把你的10次执行完成,而且很轻松。如果你要问为什么他要先执行main中的再执行thread中的,那么这个问题就要去看一下线程的调度了。你去new一个对象,总要去做一定的准备,获取足够的资源成为一个线程,然后再去调度吧。
宝贝雨橙 2012-11-06
  • 打赏
  • 举报
回复
程序没有问题 可能是你看见的结果是Thread一抢到了执行权 一下就把它全部执行完了,你多试几次 或者把循环的次数改的大些就可以看见了
wanglaosi004 2012-11-06
  • 打赏
  • 举报
回复
事件太短了 次数太少了
失落夏天 2012-11-04
  • 打赏
  • 举报
回复
计算机运算这种问题是很快的,弄不好出书的那个人用的还是86呢 一转眼的事。 你要是想看效果。 就在主线程和run方法没执行一遍就中sleep一下
pig882 2012-11-02
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 的回复:]
楼主是刚学多线程吧?
[/Quote]

N年前学过又扔了N年。。。
wzj-java 2012-11-02
  • 打赏
  • 举报
回复
楼主是刚学多线程吧?
q1531 2012-11-02
  • 打赏
  • 举报
回复
因为很快就执行完了。。循环多加点。
wuezs 2012-11-02
  • 打赏
  • 举报
回复
睡一会,就好了
niuniu20008 2012-11-02
  • 打赏
  • 举报
回复
呵呵,出书的人骗你呢,其实也是为了你好。不然要循环1W次,难道他要在书上列1万个数字啊
ll26176735 2012-11-02
  • 打赏
  • 举报
回复
P 哥 被书骗了
编程点滴 2012-10-27
  • 打赏
  • 举报
回复
多线程,书上的结果能信吗?每次结果很肯能都是不一样的,以实际情况为准
yanzhiren8 2012-10-27
  • 打赏
  • 举报
回复
循环少 单个时间片内就能完成整个循环 你可以加个sleep(1000) 也是可以的 两种方法
pig882 2012-10-27
  • 打赏
  • 举报
回复
我把 i 改成了 10000, 好像是有交替出现,但是并不是 main 和 TestThread

一行一行的交替出现,而是一整块一整块的交替出现!
pig882 2012-10-27
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]
书上骗人的实践才是主要的,不过要是你运气好可能也会出现。
[/Quote]


...........
张某码 2012-10-27
  • 打赏
  • 举报
回复
书上骗人的实践才是主要的,不过要是你运气好可能也会出现。
pig882 2012-10-27
  • 打赏
  • 举报
回复
可是书上就是10次啊
展S开K双Y翼 2012-10-27
  • 打赏
  • 举报
回复
线程间不是一人执行一遍,结果是完全随机的!
zhaoming262350 2012-10-26
  • 打赏
  • 举报
回复
把i的指增大,在输出的时候,给线程加上编号:


public class ThreadDemo9_1
{
public static void main(String args[])
{
new TestThread().start();
for(int i=0;i<30;i++)
{
System.out.println("main 线程运行"+i);

}


}

}

class TestThread extends Thread
{
public void run()
{

for(int i=0;i<30;i++)
{
System.out.println("TestThread 线程运行"+i);

}

}

}
这样就可以体现线程执行时的随机性:
sinianbanying 2012-10-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
把for(int i=0;i<10;i++)改成while(true)
[/Quote]
也行
加载更多回复(4)

62,612

社区成员

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

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