栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

synchronized问答

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

synchronized问答

简单描述下 synchronized 是干什么用

synsynchronized一种互斥锁,一次只能有一个线程进入synchronized锁住的代码块,从而解决多线程安全问题

synchronized 可以用在什么地方

synchronized 可以修饰

  • 实例方法(锁的是当前对象)
  • 静态方法(锁的是class对象)
  • 代码块(锁的是传入的对象)
synchronized 1.6 和 1.7之间的区别是什么

首先最大的区别是 1.6之前synchronized 都是重量级的锁,而且加锁的操作依赖底层操作系统
所以会消耗系统很多的资源
而 1.6之后呢 加入了 偏向锁,轻量级锁的概念,不依赖底层操作系统,依赖jvm,对系统的消耗降低

简单来说说 偏向锁/轻量级锁/重量级锁

首先在内存中 对象由 对象头 对象实际数据 和 对其填充 组成的
重点在于对象头,对象头又由几部分组成,重点关注 mark word 就可以了
mark word 存储着 锁的信息 ,每一个对象 又对应了一个 monitor 对象,而monitor对象存储着 当前持有锁的线程和等待的线程

  • 偏向锁—》偏向锁会在 mark word 中记录当前持有锁的线程的id,只有这个id的线程才可以执行代码
  • 轻量级锁—》当其他的线程尝试获取锁的时候,会通过cas 来修改 线程id,如果失败了说明 有竞争,会将锁升级成 轻量级锁
  • 重量级锁—》当一个线程进行了很多次的cas 依然没有获取到锁的时候 会升级成重量级锁,重量级锁操作的就是monitor对象

synchronized 1.6之后 引入了 偏向锁和轻量级锁就是为了 在不同的场景中 使用不同的策略,从而降低损耗。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/643807.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号