StringBuilder 与 StringBuffer 的问题

来源:6-5 谈谈ClassLoader

MySweeties

2019-10-07

看了问答区,有个问题不大明白,原图是:
图片描述

不理解老师说的“如果执行完成,那么就会先输出结果“
图片描述

写回答

3回答

翔仔

2019-10-08

同学好,join方法

你这里在For循环中,不仅仅每次调用atest.join都是主线程调用的,就连for循环,生成子线程去执行也是mian线程发动的。这里会出现串行,比如说生成第一个子线程执行的时候,由于main函数调用了join,那么它会等到第一个子线程执行完成才继续执行后续的for循环生成新的子线程2,依次类推,顺序执行并打印,就是你看到的结果。

另外一个,只能说你这样的执行对于cpu来说负担很小,执行效率很高,因此结果接近概率较大,多线程间的执行结果没法预期。

0
1
MySweeties
懂了,谢谢老师!
2019-10-08
共1条回复

MySweeties

提问者

2019-10-07

//img.mukewang.com/szimg/5d9a12c90976220106360468.jpg

//img1.sycdn.imooc.com/szimg/5d9a15f3097f2f2600000000.jpg

如上图:

0
0

翔仔

2019-10-07

同学好,这个真考验记忆力呀:)仔细看了下,当时要表达的意思是,现在有10个线程,共同操作同一个StringBuilder和StringBuffer对象,那10个线程执行完成有先后,并不是同时执行完成的,比如第一个线程先执行完成了,那么它就在run里面打印了结果,此时结果并不会等于10000呀,得等最后一个线程执行完成后,才打印10000.。。。

0
2
MySweeties
另外,观察结果发现每个线程结束时打印的数量都很靠近,为什么没有出现某一个线程打印的数量极小比如3999的情况?我对Thread-0线程设置了最大优先级,发现Thread-0结束时数量同样到达了9900左右
2019-10-07
共2条回复

剑指Java面试-Offer直通车 百度资深面试官授课

招聘季即将到来,让百度资深面试官来为你的高薪Offer保驾护航

8429 学习 · 1870 问题

查看课程