第二段代码,因为m2()前没有synchronized关键字,则在tt.start()后,线程m1()进入就绪,此时还是主线程,运行tt.m2(),但这里因为没有synchronized关键字,所以在m2()中,运行到Thread。spleep(2500)时,会暂停主线程,在2。5秒后运行m1(),注意,此时的m2()并没有运行完,只是到sleep()方法后突然停止运行m1(),而其后面的 b = 2000;这个语句没有运行到,所以此时的b还为100,进入m1()后,b又被赋值为1000,接下来又到了m1()中的Thread.sleep(5000),此时m1()这个线程又暂停,5秒后,又跳到m2()中,运行没有运行完的代码,即运行b=2000;所以此时的b的值为2000;
m2()运行完后就又回到m1()中运行其没有运行完的代码,即可输出b=2000;