企业公共服务平台网站建设方案,网站底部备案图标,建设企业网站前市场分析,深圳建设网站费用明细文章目录 synchronized特性synchronized原理锁升级/锁膨胀锁消除锁粗化 synchronized特性 互斥 当某个线程执行到某个对象的synchronized中时#xff0c;其他线程如果也执行到同一个对象的synchronized就会阻塞等待。 进入synchronized修饰的代码块相当于加锁 退出synchronize… 文章目录 synchronized特性synchronized原理锁升级/锁膨胀锁消除锁粗化 synchronized特性 互斥 当某个线程执行到某个对象的synchronized中时其他线程如果也执行到同一个对象的synchronized就会阻塞等待。 进入synchronized修饰的代码块相当于加锁 退出synchronized修饰的代码块相当于解锁 刷新内存 synchronized的工作过程 1.获得互斥锁 2.从主内存拷贝变量的最新版本到工作内存 3.执行代码 4.将更改后的变量值刷新到主内存 5.释放互斥锁 可重入 同一把锁连续加锁两次不会导致死锁那么它就是可重入的。
synchronized原理
锁升级/锁膨胀 解释 synchronized更多的考虑到降低程序员的使用负担内部就实现了“自适应”的操作。这个“自适应”的操作就是“锁升级/锁膨胀” 如果当前程序中锁竞争不激烈则以轻量级锁的状态来工作。可以第一时间拿到锁。 如果当前程序中锁竞争很激烈则以重量级锁的状态来工作。减少CPU的开销。
偏向锁是什么呢
锁消除
由JVM自动判断如果它发现某个地方的代码不需要加锁但是你写了synchronized它就会自动把锁给去掉。
比如多个线程修改多个不同的变量时你对它们分别加锁 注 JVM只有在100%确定这处代码的加锁可以去掉时才会执行锁消除操作就算有1%的可能这儿不能去掉也不会锁消除。 锁粗化
锁的粒度就是指synchronized包含的代码块里代码的多少 粒度粗包含的代码多 粒度细包含的代码少
锁粗化就是把粒度细的锁合并为粒度粗的锁。这样可以减少加锁和解锁的开销。 注 对同一个对象的加锁才能进行锁粗化锁粗化要保证粗化前和粗化后代码的逻辑不变