以个和线程有关的疑惑,sleep()和join();50分挥泪提问!

发布网友 发布时间:2024-12-17 23:27

我来回答

3个回答

热心网友 时间:2024-12-24 18:38

首先:join的意思是调用线程并等待该线程结束.在i<5时,由于没有线程join,所以执行了5次(i:0-4)的System.out.println(Thread.currentThread().getName()+"3333");
当在i=5时,因为要执行t.join(),需要等到t线程结束,进入线程的run()方法:执行Thread.sleep(5000); 等待5秒钟,后执行for(int x=0;x <12;x++)
System.out.println(Thread.currentThread().getName()+x);
}
然后t线程结束,i>5,又执行了22-5=17次的System.out.println(Thread.currentThread().getName()+"3333");
//lz应该明白了吧,此题的关键是理解join的意思

热心网友 时间:2024-12-24 18:41

zicozhang说的差不多了,但有点不是很认同:

zicozhang说的:
,因为要执行t.join(),需要等到t线程结束,进入线程的run()方法:执行Thread.sleep(5000);

我觉得并不是等到执行t.join()时,才开始进入run()方法执行Thread.sleep(5000),在t.start()的时候,run()已开始运行,与main并行运行,只不过5秒钟相对主线程5次的循环来说太长了,所以主线程循环5次的时候,还没到5秒,所以main先输出5个main3333,到第5个时,执行t.join(),这时main线程要暂停等t线程完成才能执行,可是这时还未到5秒,还要等一阵子,所以就出现了短暂的没有输出的时期,等到了5秒,t线程继续完成剩下的东西,输出了Thread-00 ...这些,完了以后,main线程就恢复了,继续刚才的循环输出剩下的main3333

就这样子

楼主要了解线程是并发的,还有就是join()的功能

热心网友 时间:2024-12-24 18:37

main()是守护进程,他其实一直都在后台提供着服务.

还有线程的运行顺序是不可控的,无论你用什么方法都不能对线程运行顺序作出准确的控制(这都是系统分配,决定的)

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com