Java并发基础
文章目录 1.Volatile 2.CAS 3.锁 4.AQS 5.ThreadPool 1.Volatile volatile是一个关键字,用于在并发编程中修饰变量 volatile:java提供的一种 弱 同步机制 轻量的同步机制,用来确保将变量的更新通知到其他线程 保证可见性(禁止指令重排)、不保证原子性 如何保证可见性 变量声明为volatile类型后,编译器与运行时都会注意到这个变量时共享的,不会将该变量 上的操作和其他内存操作仪器重排序 volatile变量不会被缓存在寄存器 指令重排 多线程环境中,线程交替运行,编译器优化重排的存在,两个线程中使用的变量无法保持一致性 JMM(Java内存模型) JMM描述的是一组规范,通过规范来定义程序中各个变量的访问方式 jmm同步规定: 1.线程解锁前,必须把共享变量的值刷新回主内存 2.线程加锁前,必须读取主内存的最新值到自己的工作内存 3.加锁解锁是同一把锁 不保证原子性 原子性:不可分割、完整性,即某个线程正在做某个具体业务,中间不可以被加塞或者被分割,需要整体完整, 要么同时成功,要么同时失败 使用AtomicInteger,synchronized 可以保证原子性 2.CAS CompareAndSet-- 比较并设置(交换) CAS是一条CPU并发原语,体现在sun.misc.Unsafe类中各个方法 public