一、多线程3要素
原子性(Synchronized, Lock):简单说就是相关操作不会中途被其他线程干扰,一般通过同步机制实现。
可见性(Volatile,Synchronized, Lock):是一个线程修改了某个共享变量,其状态能够立即被其他线程知晓,通常被解释为将线程本地状态反映到主内存上,volatile 就是负责保证可见性的。
有序性(Volatile,Synchronized,Lock):是保证线程内串行语义,避免指令重排等。
二、线程安全
保证线程安全可从多线程3要素出发:
- 原子性(Atomicity):单个或多个操作是要么全部执行,要么都不执行
- Lock:保证同时只有一个线程能拿到锁,并执行申请锁和释放锁的代码
- synchronized:对线程加独占锁,被它修饰的方法/代码块只允许一个线程访问
- 可见性(Visibility):当一个线程修改了共享变量的值,其他线程能够立即得知这个修改
- volatile:直接操作主存;
- synchronized:在释放锁之前会将工作内存新值更新到主存中
- 有序性(Ordering):程序代码按照指令顺序执行
- volatile: 本身就包含了禁止指令重排序的语义
- synchronized:保证一个变量在同一个时刻只允许一条线程对其进行加锁操作,使得持有同一个锁的两个同步块只能串行地进入
四、synchronized
synchronized实现原理
五、volatile
volatile实现原理
网友评论