synchronized工作过程中,具体讨论下synchronized里面都干了啥??

简介: synchronized工作过程中,具体讨论下synchronized里面都干了啥??

synchronized工作过程中,具体讨论下synchronized里面都干了啥??

  1. 开始是乐观锁,如果锁冲突频繁,就转化为悲观锁
  2. 开始时候轻量级锁实现,如果锁被持有的时间较长,就转换为重量级锁
  3. 实现轻量级锁的时候,大概率用到的自旋锁策略
  4. 是一种不公平锁
  5. 是一种可重入锁
  6. 不是读写锁

synchronized的关键策略:锁升级~

偏向锁:只是先让线程针对锁,做个标记(做个标记很快的,非常轻量)

如果整个代码执行过程中都没有遇到别的线程和竞争这个锁,此时,就不用真的加锁了,但是,一旦要有了别的线程尝试来竞争这个锁!于是偏向锁就立即升级成真正的锁(轻量级锁),此时,别的线程只能等待,既保证了效率,又保证了线程安全!!

锁消除:编辑阶段,做的手段

检测当前代码是否是多线程执行/是否有必要加锁??如果无必要,又把锁给写上了,就会在编译过程中自带把锁去掉!!

如:synchronized不应该被滥用!

StringBuilder与StringBuffer中:StringBuffer是线程安全的!!

对StringBuffer而言,把关键的方法都加了synchronized关键字!!

但是,如果单线程使用StringBuffer,不涉及线程安全问题,但是synchronized是不是也写了??相当于加锁操作,没有真正被编译!!

不是说写了synchronized就一定线程安全

也不是说,不写synchronized就一定线程不安全

这得看具体的代码了!

锁粗化

锁的粒度:synchronized代码块,包含代码的多少(代码越多,粒度越粗,代码越少,粒度越细)

一般写代码的时候,多数情况下,是希望锁的粒度更小一点(串行执行的代码少,并发执行的代码就多),但是,如果某个场景要频繁的加锁/解锁,此时编辑器就可以把这个锁优化成一个更粗粒度的锁!!

每次的加锁/解锁,都要有开锁,尤其是每次释放锁之后,重新加锁,还需要重新竞争。

举列:

上班之后:向领导汇报工作(领导给安排三个工作:ABC)

1.先打电话,汇报工作A的进程,挂了电话;

再打电话,汇报工作B的进程,挂了电话;

再打电话,汇报工作C的进程,挂了电话;

打电话给领导,领导就干不了别的了,别人给领导打电话就得阻塞等待!!

每次锁竞争都可能引起一定的等待开锁,此时整体的效率可能降低!!

2.打一个电话,汇报ABC的工作,挂了电话~~

相关文章
|
5月前
|
Java 开发者 C++
Java多线程同步大揭秘:synchronized与Lock的终极对决!
Java多线程同步大揭秘:synchronized与Lock的终极对决!
98 5
|
8月前
|
安全 Java 程序员
【Java多线程】面试常考——锁策略、synchronized的锁升级优化过程以及CAS(Compare and swap)
【Java多线程】面试常考——锁策略、synchronized的锁升级优化过程以及CAS(Compare and swap)
73 0
|
存储 安全 Java
大白话讲解synchronized锁升级套路
synchronized锁是啥?锁其实就是一个对象,随便哪一个都可以,Java中所有的对象都是锁,换句话说,Java中所有对象都可以成为锁。 这次我们主要聊的是synchronized锁升级的套路
135 0
synchronized锁升级原理剖析 ✨ 每日积累
synchronized锁升级原理剖析 ✨ 每日积累
synchronized锁升级原理剖析 ✨ 每日积累
|
存储 安全 Java
小白也能看懂的锁升级过程和锁状态
小白也能看懂的锁升级过程和锁状态
275 0
小白也能看懂的锁升级过程和锁状态
|
存储 安全 Java
看完你就明白的锁系列之锁的状态
前面两篇文章我介绍了一下 看完你就应该能明白的悲观锁和乐观锁 看完你就明白的锁系列之自旋锁 看完你就会知道,线程如果锁住了某个资源,致使其他线程无法访问的这种锁被称为悲观锁,相反,线程不锁住资源的锁被称为乐观锁,而自旋锁是基于 CAS 机制实现的,CAS又是乐观锁的一种实现,那么对于锁来说,多个线程同步访问某个资源的流程细节是否一样呢?换句话说,在多线程同步访问某个资源时,锁的状态会如何变化呢?本篇文章来探讨一下。
105 0
看完你就明白的锁系列之锁的状态
|
存储 NoSQL Java
看看我给面试官是如何娓娓道来synchronized锁升级过程的
看看我给面试官是如何娓娓道来synchronized锁升级过程的
177 0
看看我给面试官是如何娓娓道来synchronized锁升级过程的
J3
|
存储 安全 Java
synchronized解析及锁膨胀过程,面试再也不怕了
synchronized解析及锁膨胀过程,面试再也不怕了
J3
555 0
synchronized解析及锁膨胀过程,面试再也不怕了

热门文章

最新文章

相关实验场景

更多