1.synchronized的用法
synchronized 是Java提供的一个并发控制的关键字,主要有两种用法,分别是同步方法和同步代码快。即synchronized既可以修饰方法也可以修饰代码块。
被synchronized修饰的代码块及方法,在同一时间只能被单个线程访问。
- 普通同步方法:锁的是当前实例对象
- 静态同步方法:锁的是当前类的class对象(因为静态方法在对象之前运行,运行静态方法的时候可能都没有对象,所以是当前类的class对象)
- 同步方法块:锁的是括号里的对象
// 2.synchronized实现原理 本人比较菜还无法深入理解>O<.......
2.volatile的用法
首先volatile只能用来修饰变量,无法修饰方法和代码块。volatile提供可见性和有序性。
再说一下原子性、可见性、顺序性
原子性是指一个操作是不可中断的,要全部执行完成,要不就都不执行
可见性是指多个线程访问同一个变量,其中一个线程修改了这个变量的值,其他线程可立即看到修改的值
顺序行是指按照代码的先后顺序执行
volatile与可见性:被其修饰的变量在被修改后可以立即同步到主内存,被其修饰的变量每次使用之前都是从主内存刷新
volatile与顺序性:volatile可以禁止指令重排优化,这就保证了代码程序会严格按照代码的先后顺序来执行