采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
看了问答区,有个问题不大明白,原图是:
不理解老师说的“如果执行完成,那么就会先输出结果“
原问题链接是:https://coding.imooc.com/learn/questiondetail/95319.html
同学好,join方法
你这里在For循环中,不仅仅每次调用atest.join都是主线程调用的,就连for循环,生成子线程去执行也是mian线程发动的。这里会出现串行,比如说生成第一个子线程执行的时候,由于main函数调用了join,那么它会等到第一个子线程执行完成才继续执行后续的for循环生成新的子线程2,依次类推,顺序执行并打印,就是你看到的结果。
另外一个,只能说你这样的执行对于cpu来说负担很小,执行效率很高,因此结果接近概率较大,多线程间的执行结果没法预期。
懂了,谢谢老师!
如上图:
同学好,这个真考验记忆力呀:)仔细看了下,当时要表达的意思是,现在有10个线程,共同操作同一个StringBuilder和StringBuffer对象,那10个线程执行完成有先后,并不是同时执行完成的,比如第一个线程先执行完成了,那么它就在run里面打印了结果,此时结果并不会等于10000呀,得等最后一个线程执行完成后,才打印10000.。。。
我动手实践了一下,并打印了时间戳,发现情况正如老师所说。。 现在我有一个问题,因为for循环是控制添加一千个c字符,那么如何使打印结果出现 线程0-9按次序同时buffer打印数量一千一千的往上增的现象呢?我实践过老师给的建议,使用join方法,结果的确达到上述预期,但同时我对join方法产生了疑问,join方法的作用是当某个程序执行流中调用了其他线程的join方法时,调用线程将被阻塞,直到join的线程执行完。。我执行多次的结果是线程按0-9依次显示,最后main方法结束,也就是说第i+1个线程被阻塞,在等待第i个线程执行完,但是这10个线程之间并没有调用join的关系,而是main同10个线程之间存在调用关系,为什么也会出现0-9依次打印的现象?是不是我对join方法的理解有误?(修改后的代码已上传至问答区)
另外,观察结果发现每个线程结束时打印的数量都很靠近,为什么没有出现某一个线程打印的数量极小比如3999的情况?我对Thread-0线程设置了最大优先级,发现Thread-0结束时数量同样到达了9900左右
登录后可查看更多问答,登录/注册
招聘季即将到来,让百度资深面试官来为你的高薪Offer保驾护航
1.8k 27
2.7k 22
1.2k 15
1.4k 14
1.3k 14