JVM授命重排的例子

JVM指令重排的例子amountA amountA - 50committed trueamountB amountB + 50这时候打印出来的值

JVM指令重排的例子

        amountA = amountA - 50;        committed = true;        amountB = amountB + 50;


这时候打印出来的值可能就是 A = 50, B = 100 .


要解决这个问题,就要给doTransfer()和printAccountsWhenDone()都加上syncrhonzied关键字,当t1执行doTransfer时t2必须等待,等t1执行完后t2再去获取A和B的值,即使doTransfer()内部有指令重排,也不会有问题。