1、悲观锁 乐观锁
等待:相当于挂起,也就是阻塞 wait() cpu让出时间片给其他线程使用(上下文切换)
唤起:notify()
2、CAS算法
弊端:多次自旋,会占用cpu资源
场景1:多次自旋
场景2:ABA问题
3、自旋锁
4、上线文切换
线程上下文切换:可以理解为:cpu和内存之间的一次io,消耗系统资源
5、Synchronized
CAS不涉及到上下文切换。(设计到多线程时,如果用synchronized锁时,要关闭偏向锁)
Synchronized:本质是一个悲观锁
Synchronized和lock锁
concurrent
并发包 java.util.concurrent
AQS