1、并发编程的本质是解决什么问题
多线程编程:
同步:线程间的协作问题
互斥:独占锁
分工:大任务的拆解
2、并发要学什么?
2.1、JMM 模型
并发特性:原子性,有序性,可见性
硬件:机械同感,CPU 缓存一致性协议(MESI),volatile,CAS
2.2、线程
内核级线程,javaThread -> native -> osThread -> 内核线程(pthread_create)
2.3、锁机制
synchronized,JUC(独占锁、重入锁、读写锁),AQS(同步、条件)
2.4、线程池
线程复用
2.5、线程工具类,并发容器
2.6、并行、并发
并发的风险:
- 性能问题(上下文切换)
- 活跃性的问题(饥饿,死锁、活锁)
- 线程安全问题(加锁):是否满足原子性,有序性、可见性,和 happens-before 原则,来判断是否有线程安全问题
2.7、并发的设计原则
不变性
copyOnWrite
等待唤醒机制
