获取/释放语义的作用并不在于其他线程多久才能看到volatile字段本身的新写入的值,而在于易失性 *** 作在不同线程之间建立事前联系的方式。如果线程A读取了一个volatile字段并在另一个线程B中看到了写入该字段的值,那么线程A也将保证在线程B执行该 *** 作之前,线程A会看到线程B写入其他变量(不一定是volatile)的值。易失性写入。这看起来像是缓存刷新,但仅 从读取volatile的线程的角度来看,其他未触及volatile字段的线程对B没有排序保证,并且可能会看到一些较早的非易失性写入,但是如果编译器/ JIT则看不到其他很倾斜
监视器获取/发布的类似特征是它们引起的事前关联-监视器释放之前一个线程的动作可以保证在另一个线程随后获取同一监视器之后可见。Volatiles为您提供与监视器同步相同的顺序保证,但没有阻塞。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)