本帖最后由 lzy418 于 2014-6-21 07:41 编辑
首先提醒一个笔误,Lz的B类里输出的也是c+i。 在我的机子上情况是这样的:
在c输出到19之前,是a,b,c三者混合输出,读到 join( ); 之后变成了a,b混合,最后从c20开始只输出c。
想必lz是这个情况,所以才看不出问题所在。事实上,lz三个类的输出循环实在是太少了!对于现代计算机的速度来说太少了!
所以,本人将lz的循环增加到了10000,出现了不同的结果:
在c输出到19之前,是a,b,c三者混合输出,读到 join( ); 之后变成了a,b混合,最后从c20开始b,c混合输出。
是的,加过循环数后我们就能看到b线程始终是活跃的,并没有如同lz期待的那样挂起。
原因是lz对join方法的理解有偏差,join并不能停止所有其他线程,而是只能挂起调用这个方法的线程,在lz的代码中就是main线程,而b根本没有被挂起,自然会继续快乐的抢资源输出。
|