JUC并发包结构图
1. 基础知识
- Java并发编程1——基础知识:https://blog.csdn.net/qq_41157876/article/details/114890794
- 并行和并发
- 同步和异步
- 上下文切换
- 死锁(四个必要条件 + 破坏方法)
- 线程活跃性问题(活锁,死锁,饥饿)
- Java并发编程2——Java线程:https://blog.csdn.net/qq_41157876/article/details/114902271
- 线程的创建(Thread,Runnable,FutureTask)
- 线程的常用方法
- 线程的生命周期和状态
- 操作系统层面:五种状态
- Java API层面:六种状态
- 查看线程和进程方法
- 锁对象的方法:wait()和notify()
- 执行原理
- WAITING与BLOCKED状态的区别
- wait()与sleep()的区别
- notify()与notifyAll()的区别
- 虚假唤醒
- LockSupport类的方法:park()和unpark(thread)
- 执行原理
- Java并发编程3——JMM / synchronized / volatile / Monitor / 加锁算法:https://blog.csdn.net/qq_41157876/article/details/114930398
- Java内存模型(原子性,可见性,有序性)
- volatile
- 可见性:内存语义
- 有序性:内存屏障
- synchronized
- 两种加锁方式
- 实例加锁:synchronized(this) / 普通方法
- 类对象加锁:synchronized(this.class) / 静态方法
- 底层原理:Monitor
- monitorenter / monitorexit / ACC_SYNCRONIZED
- C++结构体:Entry_list,Wait_List,Owner
- 对象头
- 锁
- 重量级锁
- 轻量级锁
- 偏向锁
- 其他优化:自旋,锁粗化,锁消除
2. executor
- Java并发编程4——Executor / ExecutorService / ThreadPoolExecutor线程池:https://blog.csdn.net/qq_41157876/article/details/115297036
- 继承关系
- Executor接口(顶层接口)
- ExecutorService接口
- AbstractExecutorService抽象类
- ThreadPoolExecutor实现类
- ThreadPoolExecutor
- 属性
- 线程池状态(ctl属性)
- 构造器 / 参数
- 线程池运行机制
- 源码级别
- Work类
- Executors工具类提供的线程池实现
- nexFixedThreadPool:固定大小的线程池
- newCachedThreadPool:带缓冲池的线程池
- newSingleThreadExecutor:单线程线程池
- 其他
- submit() / invokeAny() / invokeAll()使用示例
- Java并发编程5——Future 和 Callable:
3. Atmoic原子类
- Java并发编程6——Atomic家族1:https://blog.csdn.net/qq_41157876/article/details/115331426
- 概述
- 基本类型(boolean, int, long, 对象)
- AtomicBoolean
- AtomicInteger
- AtomicLong
- AtomicReference
- 数组(Long, Integer, 对象)
- AtomicLongArray
- AtomicIntegerArray
- AtomicReferenceArray
- 字段更新器(指定对象的指定字段)
- AtomicLongFieldUpdater
- AtomicIntegerFieldUpdater
- AtomicReferenceFieldUpdater
- 带版本号引用类型(对象,解决ABA)
- AtomicStampedReference
- AtomicMarkableReference
- 原子累加器(JDK1.8):AtomicLong和AtomicDouble的升级类型,专门用于数据统计,性能更高。
- DoubleAccumulator
- DoubleAdder
- LongAccumulator
- LongAdder
- Java并发编程7——Atomic家族2:https://blog.csdn.net/qq_41157876/article/details/115342518
- 原子累加器(JDK1.8):AtomicLong和AtomicDouble的升级类型,专门用于数据统计,性能更高。
- LongAdder / DoubleAdder
- LongAccumulator / DoubleAccumulator
- 伪共享问题
- 缓存行失效 / 伪共享
- @sun.misc.Contended注解
- Unsafe对象
3.locks 锁相关
- Java并发编程8——ReentrantLock / AbstractQueuedSynchronizer:https://blog.csdn.net/qq_41157876/article/details/115324421
- ReentrantLock
- 介绍(与synchronized的区别)
- 使用方式
- 源码
- NonfairSync 和 FairSync
- AbstractQueuedSynchronizer(AQS)
- 源码
4. tools工具包
- Java并发编程9——CountDownLatch / CyclicBarrier / Semaphore:https://blog.csdn.net/qq_41157876/article/details/107926326
- CountDownLatch
- 介绍与用法
- 原理和Api
- CyclicBarrier
- 介绍与用法
- 原理和Api
- Semaphore
- 介绍与用法
- 原理和Api
- Executors jdk自带的工具实现
5. collections 安全的集合类
- Queue 阻塞队列和非阻塞队列
- Java并发编程12——CopyOnWrite系列:https://blog.csdn.net/qq_41157876/article/details/115465154
- CopyOnWrite系列
- 写时复制;弱一致性;写加锁,读快照
- CopyOnWriteArrayList
- 属性:reentrantLock + volatile Object[]
- add方法:先加锁,复制写,改变引用对象,解锁
- get方法:不加锁,对snapshot操作,存在弱一致性问题
- CopyOnWriteArraySet
- 内部用CopyOnWriteArrayList来代理
- Java并发编程13——concurrentHashMap:
-
6. 其他并发相关
- Java并发编程14——ThreadLocal:https://blog.csdn.net/qq_41157876/article/details/107680612
- 概述
- 与synchronized的区别
- 用法
- 源码分析
- Thread类:ThreadLocalMap threadLocals属性
- ThreadLocalMap类:ThreadLocal的静态内部类,实际是Entry<ThreadLocal, Object>数组
- Entry类:ThreadLocalMap的静态内部类,继承弱引用
- ThreadLocal常用方法
- get(),set()
- 延迟构造性质
- 内存泄漏
- 为什么Entry要继承弱引用
- 内存泄漏原因及避免方法
- InheritabIeThreadLocal