你只创建了一个SecondThread实例,两个线程都会调用这个实例的run方法,而方法里也没有sleep或者yield方法能够让线程主动休眠,于是线程A就一直跑完(只循环3次,很短),等到线程B有机会跑的时候,i已经是3了,就不跑了。调大了数可以是因为执行时间长了,线程A没跑完,操作系统就让它休眠,让线程B跑,此时i还没到循环次数,所以就可以了。
不知道你想做什么,如果是不共享i变量,应该创建两个SecondThread实例,这样线程A和线程B就各跑各的。
你的st 实际上同一个对象,这样A先运行,由于只有三次所以B还没运行或者B刚运行发现循环条件不满足即退出,st就结束了。
你确定?不是都应该
Thread A 0
Thread B 0
Thread A 1
Thread B 2
或则其它顺序,但是A B肯定都会执行?