指令重排

2020-03-19  本文已影响0人  红烧鸡翅膀_我喜欢吃

jvm做的一种优化策略,为了提高cpu的利用率,更改了指令执行顺序。

单线程下:jvm保证的指令执行的基本有序性,即happen-before原则,更改后顺序不影响原有结果。

对于多线程不保证。

为了兼容多线程,还有以下重排原则,可以通过代码层面保证重排不影响执行结果

1、锁定规则:这个规则比较好理解,无论是在单线程环境还是多线程环境,一个锁处于被锁定状态,那么必须先执行unlock操作后面才能进行lock操作。

2、volatile变量规则:这是一条比较重要的规则,它标志着volatile保证了线程可见性。通俗点讲就是如果一个线程先去写一个volatile变量,然后一个线程去读这个变量,那么这个写操作一定是happens-before读操作的。

3、传递规则:提现了happens-before原则具有传递性,即A happens-before B , B happens-before C,那么A happens-before C

4、线程终结规则:假定线程A在执行的过程中,通过制定ThreadB.join()等待线程B终止,那么线程B在终止之前对共享变量的修改在线程A等待返回后可见。

---------------------------------------------------------------------------

上一篇 下一篇

猜你喜欢

热点阅读