java中,volatile关键字有两大作用: 1.保证线程的可见性 2.防止指令重排序 这篇文章主要通过典型案例,体现可见性这一特性. 概念: java中,堆内存是线程共享的.而每个线程,都应该有自己独享的内存用于工作.所以,当线程访问到堆内存中的共享变量时,会考虑copy一份,存在自己的工作空间中.之后对工作空间中的值进行操作,完成后重新写回到堆内存. 这样一来,在多线程同时访问这个变量时,就可能出现拿不到实时的值的问题(根本原因在于:本来共享的变量,因为缓存到各个线程的工作空间导致数据在写