一、轻量级同步机制:volatile关键字
1. volatile的作用
- volatile可以保证变量在多个线程之间可见
2. volatile与synchronized比较
- volatile关键字是线程同步的轻量级实现,其性能要比synchronized好
- volatile只能修饰变量,而synchronized修饰的是方法或者代码块
- 随着JDK新版本的发布,synchronized的执行效率也有较大提升,在开发中使用synchronized的比率很大
- volatile变量不会发生阻塞,而synchronized可能会发生阻塞
- volatile能保证数据的可见性,但是不能保证原子性;而synchronized既可以保证原子性,也可以保证可见性
- volatile解决的是变量在多个线程之间的可见性;而synchronized解决的是多个线程之间访问共享数据的同步性
3. volatile非原子特性
- volatile只能保证变量的可见性,无法保证原子性
4. 常用原子类进行自增和自减操作
- 我们知道i++或者i–操作不是原子操作,除了使用synchronized进行同步之外,也可以使用AtomicInteger/AtomicLong原子类进行实现