美文网首页
6、多线程3要素&如何实现线程安全

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

作者: lois想当大佬 | 来源:发表于2020-04-30 10:00 被阅读0次

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

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

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

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

    - 原子性(Atomicity):单个或多个操作是要么全部执行,要么都不执行
    
        - Lock:保证同时只有一个线程能拿到锁,并执行申请锁和释放锁的代码
    
        - synchronized:对线程加独占锁,被它修饰的方法/代码块只允许一个线程访问
    
    - 可见性(Visibility):当一个线程修改了共享变量的值,其他线程能够立即得知这个修改
    
        - volatile:直接操作主存;
    
        - synchronized:在释放锁之前会将工作内存新值更新到主存中
    
    - 有序性(Ordering):程序代码按照指令顺序执行
    
        - volatile: 本身就包含了禁止指令重排序的语义
    
        - synchronized:保证一个变量在同一个时刻只允许一条线程对其进行加锁操作,使得持有同一个锁的两个同步块只能串行地进入
    

    四、synchronized
    synchronized实现原理

    五、volatile
    volatile实现原理

    相关文章

      网友评论

          本文标题:6、多线程3要素&如何实现线程安全

          本文链接:https://www.haomeiwen.com/subject/synawhtx.html