主要思想
- 自旋:线程空转,循环等待锁释放(减少线程上线文切换次数,因为可能锁占用时间比较短,可能还没有线程上下文切换的时间长,所以可以通过自旋来加快代码的运行效率)
- LockSupport (阻塞 park,唤醒unpark,调用Unsafe的unpack 和 park方法)
- CAS(保证原子性 调用Unsafe的CAS原子操作)
简介:AQS是Java提供的一种实现阻塞锁和一系列依赖队列的同步器框架
基本思路:AQS中线程获取锁时,使用CAS算法进行比较,确保原子性,对象未则获取锁,加锁则自旋重试获取锁,到达自旋上限,则将线程进行阻塞加入同步队列等待锁释放,锁释放完成根据 公平还是非公平锁,再决定是一起竞争 还是按照优先队列来唤醒线程并获取锁,重复上面步骤,直到队列为空