6、多线程3要素&如何实现线程安全

2020-04-30  本文已影响0人  lois想当大佬

一、多线程3要素
原子性(Synchronized, Lock):简单说就是相关操作不会中途被其他线程干扰,一般通过同步机制实现。

可见性(Volatile,Synchronized, Lock):是一个线程修改了某个共享变量,其状态能够立即被其他线程知晓,通常被解释为将线程本地状态反映到主内存上,volatile 就是负责保证可见性的。

有序性(Volatile,Synchronized,Lock):是保证线程内串行语义,避免指令重排等。

二、线程安全
保证线程安全可从多线程3要素出发:

- 原子性(Atomicity):单个或多个操作是要么全部执行,要么都不执行

    - Lock:保证同时只有一个线程能拿到锁,并执行申请锁和释放锁的代码

    - synchronized:对线程加独占锁,被它修饰的方法/代码块只允许一个线程访问

- 可见性(Visibility):当一个线程修改了共享变量的值,其他线程能够立即得知这个修改

    - volatile:直接操作主存;

    - synchronized:在释放锁之前会将工作内存新值更新到主存中

- 有序性(Ordering):程序代码按照指令顺序执行

    - volatile: 本身就包含了禁止指令重排序的语义

    - synchronized:保证一个变量在同一个时刻只允许一条线程对其进行加锁操作,使得持有同一个锁的两个同步块只能串行地进入

四、synchronized
synchronized实现原理

五、volatile
volatile实现原理

上一篇下一篇

猜你喜欢

热点阅读