volatile 关键字: 当多个线程进行操作共享数据时,可以保证内存中的数据是可见的;相较于 synchronized 是一种较为轻量级的同步策略 volatile 不具备"互斥性" volatile 不能保证变量的"原子性"
可见性: 可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉。通常,我们无法确保执行读操作的线程能适时地看到其他线程写入的值,有时甚至是根本不可能的事情。为了 确保多个线程之间对内存写入操作的可见性,必须使用同步机制。
用volatile修饰的变量,就会具有可 见性。volatile修饰的变量不允许线程内部缓存和重排序,即直接修改内存。所以对其他线 程是可见的。但是这里需要注意一个问题,volatile只能让被他修饰内容具有可见性,但不 能保证它具有原子性。比如 volatile int a = 0;之后有一个操作 a++;这个变量a具 有可见性,但是a++ 依然是一个非原子操作,也就是这个操作同样存在线程安全问题
结果不定
Volatie声明变量后对所有线程可见,通常适用于共享变量
*volatile并不能保证多个线程共同修改running变量时所带来的不一致问题,也就是说volatile 不能替代synchronized