我把java核心编程思想的线程同步的银行转账代码加了几句测试代码,用来测试在线程进入Bank类bank对象的transfer方法的同步代码区域前后对bank对象的num成员的改变。
然后每个线程运行run方法时会调用bank对象的transfer方法
在transfer方法中会把线程ID赋值给num,代表num成员发生变化
我开了十个线程进行对transfer方法的使用,每个线程start后,线程9号执行到第3句输出语句(此时num为0)然后被剥夺运行权,
**重点到了,此时轮到线程4号运行,它改变num的值,把ID值为14赋值给num,此时num==14
问题如下图
望大神指点一下为什么又轮到线程9号执行时这第4句输出(0++++++++++++++4Thread[Thread-9,5,main])num还是0到下一句第5句(14++++++++++++++5Thread[Thread-9,5,main])num就变成14了,是否涉及到java内存模型,以及其他的原因