在原子性、可见性、有序性中,volatile关键字主要在可见性中发挥作用。volatile声明的变量对所有线程来说是可见的,就是说当变量的值发生改变的时候,其他线程可以立马发现这个变化。应该是由于编译器优化的存在,这里变量虽然没有被volatile修饰,但是仍然对其他线程可见。。。。。因为i++并不是原子操作,i++是有两步操作的,比如 i=0; i++1.读取i=02.计算i+1,然后赋值给i那么可能存在2个线程同时读取到i=0,并计算出结果i=1然后赋值给I那么就得不到预期结果i=2。就是说虽然Volatile修饰的变量的变化可以被其他线程看到,但是如果同时去读这个变量,然后进行写操作,则仍会导致线程安全问题。首先要知道Volatile修饰的变量会做两件事:。volatile 变量的内存可见性是基于内存屏障实现。

Java的Volatile实例用法及讲解

Java的Volatile实例用法及讲解