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
等待唤醒机制