sychronized底层原理,为什么慢?

sychronized底层原理,为什么慢?

底层原理:

Synchronized通过编译,会在同步块的前后分别形成monitorenter和monitorexit这个两个字节码指令。

1)在执行monitorenter指令时,首先要尝试获取对象锁。如果这个对象没被锁定,或者当前线程已经拥有了那个对象锁,把锁的计算器加1

2)相应的,在执行monitorexit指令时会将锁计算器减1,当计算器为0时,锁就被释放了

3)如果获取对象锁失败,那当前线程就要阻塞,直到对象锁被另一个线程释放为止。

sychronized是重量级锁:同一时刻有多个线程竞争同一把锁

当多个线程竞争同一把锁时,竞争失败的线程会被阻塞。直到只有锁的线程将锁释放后再次唤醒阻塞的线程

慢的原因:

线程的唤醒和阻塞是一个很耗费CPU资源的操作

优化:

使用自旋锁来获取重量级锁,线程未获得锁后,不是一味地阻塞,而是让线程通过循环不断尝试获取锁

自旋锁的缺点:

若线程占用锁的时间过长,导致CPU资源拜拜浪费

相关推荐

方舟生存进化手机版加特林怎么做 加特林制作及解锁方法
《战神》全迷宫解谜攻略:再也不怕卡关的终极指南
华硕Z97-AR 黑金限量版
365体育网址备用

华硕Z97-AR 黑金限量版

10-06 🌱 4203