关键词:
cas: 乐观锁机制,当写时数据的状态与读时数据的状态不一致时,写失败。
锁的优缺点对比:

偏向锁:
正常场景中总是单个线程重复访问某个同步代码块,为了优化这一场景下的程序,偏向锁在线程执行完后不释放锁,即不修改对象头中的mark word中锁指向的线程为null,而是在其他线程想要访问时,通过暂停线程检查是否存活来释放锁。

轻量级锁:
轻量级锁通过自旋的方式重复获取锁,先在栈中分配空间将对象mark word 状态复制一份保存,然后通过cas修改对象的mark word获取锁,
获取失败会自旋一直获取,当释放锁时将mark word状态还原,如果状态不一致,说明锁升级为重量级锁,唤醒阻塞线程。

重量级锁:
自旋需要消耗cpu资源,如果多个线程一直自旋是在消耗cpu资源,重量级锁通过阻塞的方式来等待锁的释放,当锁释放后唤醒线程来实现新一轮的竞争锁。
网友评论