synchronized关键字
synchronized能使代码块或者方法同步,synchronized修饰的代码块或者方法具有原子性
使用方法
- 修饰代码块,作用于代码块,锁的传入对象的锁
sychronized (obj) {
for (int i = 0; i < 100; i++)
System.out.println(i)
}
- 修饰方法,作用于整个方法,锁的是本对象
- 修饰静态方法,作用于整个静态方法,锁的是所有该类的对象
- 修饰类,作用于类的所有方法,锁所有 对象
volatile关键字
volatile关键修饰的变量最大的作用是每次线程读取的该值都是最新的
volatile关键字并不具有原子性
比如两个线程同时读取volatile修饰的变量i时,读到i的最新值都是5,然后两个线程对i进行自增,自增后i的值是6,但理论应该是7