volatile关键字的作用:强制从公共堆栈中取得变量的值,而不是线程私有数据栈。
volatile 与 synchronized 关键字比较:
1.volatile只能修饰变量
2.多线程访问volatile不会发生阻塞,而synchronized会阻塞
3.volatile能保证可见性,无法保证原子性。synchronized可以保证原子性,间接也可保证可见性。因为它会将私有内存和公共内存做同步。
4.volatile解决变量在多个线程之间的可见性,synchronized解决多个线程之间访问资源的同步性。
对于i++的操作,还可以使用AtomicInteger类实现。