0%

  • CAS 的全称是 Compare And Swap,是 CPU 并发原语

    • CAS 并发原语体现在 Java 语言中就是 sun.misc.Unsafe 类的各个方法,调用 UnSafe 类中的 CAS 方法,JVM 会实现出 CAS 汇编指令,这是一种完全依赖于硬件的功能,实现了原子操作
    • CAS 是一种系统原语,原语属于操作系统范畴,是由若干条指令组成 ,用于完成某个功能的一个过程,并且原语的执行必须是连续的,执行过程中不允许被中断,所以 CAS 是一条 CPU 的原子指令,不会造成数据不一致的问题,是线程安全的

    底层原理:CAS 的底层是 lock cmpxchg 指令(X86 架构),在单核和多核 CPU 下都能够保证比较交换的原子性

    • 程序在单核处理器上运行时,会省略 lock 前缀,单处理器自身会维护处理器内的顺序一致性,不需要 lock 前缀的内存屏障效果
    • 程序在多核处理器上运行时,会为 cmpxchg 指令加上 lock 前缀。当某个核执行到带 lock 的指令时,CPU 会执行总线锁定或缓存锁定,将修改的变量写入到主存,这个过程不会被线程的调度机制所打断,保证了多个线程对内存操作的原子性

    作用:比较当前工作内存中的值和主物理内存中的值,如果相同则执行规定操作,否则继续比较直到主内存和工作内存的值一致为止

阅读全文 »

  • volatile 是 Java 虚拟机提供的轻量级的同步机制(三大特性)
    • 保证可见性
    • 不保证原子性
    • 保证有序性(禁止指令重排)
阅读全文 »

  • JMM 体现在以下几个方面:
    • 原子性:保证指令不会受到线程上下文切换的影响
    • 可见性:保证指令不会受 cpu 缓存的影响
    • 有序性:保证指令不会受 cpu 指令并行优化的影响
阅读全文 »

  • synchronized
  • wait-notify
  • park-unpark
  • ReentrantLock
阅读全文 »