当前位置: 首页 > news >正文

synchronized (Java)

目录

一、synchronized 的特性

二、synchronized 的使用

1、修饰方法

2、修饰代码块

三、synchronized 锁机制


一、synchronized 的特性

  1. 原子性:synchronized 修饰的代码块或方法,在同一时刻只能有一个线程执行,保证了原子性,避免多线程下数据的不一致
  2. 可见性:当线程释放锁时,会将工作内存中的变量刷新到主内存,当线程获取到锁时,会从主内存中读取最新的变量值,保证了多线程变量的可见性
  3. 开始是乐观锁,如果锁冲突频繁,就转换为悲观锁
  4. 开始是轻量级锁实现,如果锁被持有的时间较长,就转换为重量级锁
  5. 实现轻量级锁的时候大概会用到的自旋锁策略
  6. 可重入锁:同一线程可以多次获取同一把锁,不会因为自己已经持有锁而造成死锁
  7. 是一种不公平锁
  8. 不是读写锁


二、synchronized 的使用

1、修饰方法

  • 修饰实例方法:锁是当前实例对象
    public synchronized void method(){//代码块}
  • 修饰静态方法:锁是当前类的 Class 对象
    public static synchronized void staticMethod(){//代码块}


2、修饰代码块

  • 指定对象作为锁
    Object locker=new Object();public void method(){synchronized (locker) {//代码块}}
  • 使用当前实例作为锁
    public void method(){synchronized (this) {//代码块}}
  • 使用类的 Class 对象作为锁

   public void method(){synchronized (ClassName.class) {//代码块}}


三、synchronized 锁机制

    synchronized 的锁机制会根据竞争情况进行锁升级,从无锁状态逐步升级为偏向锁、轻量级锁(自旋锁是其中一种表现),最后到重量级锁,以平衡性能和线程安全

  1. 无锁:对象刚创建时,还没有线程竞争它的锁,无任何开销,但不保证线程安全
  2. 偏向锁:偏向锁不是真的加锁,而是在锁的对象中记录一个标记(记录该锁所属的线程),如果没有其它线程参与竞争锁,那么就不会真正执行加锁操作,从而降低程序开销,一旦真的涉及到其它线程竞争,再取消偏向锁状态,进入轻量级锁状态
  3. 轻量级锁(自旋锁为其表现形式):当有线程竞争,但等待时间很短(如锁被其它线程短暂持有),竞争线程不会立即阻塞,而是通过 “ 自旋 ” (循环判断锁是否释放)来等待,避免线程切换的开销,但自旋太久会浪费CPU
  4. 重量级锁:当线程竞争激烈或持有锁时间长时,自旋已无意义,会升级为重量级锁,竞争线程会阻塞并放入等待队列,由操作系统调度唤醒,开销大,但可以保证线程安全


http://www.dtcms.com/a/462655.html

相关文章:

  • LINUX——调试器gdb/cgdb的使用
  • GIS实战:投影变换教程与问题解答(上)
  • 项目(3) - LVGL 图形用户界面(GUI)库
  • 长春专业网站推广给我高清电影
  • Redis07-面试题
  • 甘肃省建设社厅网站电商要怎么做起来
  • 做软件常用的网站四川建筑职业技术学院教务网
  • 公司营业执照可以做几个网站微信小程序怎么制作自己的程序
  • 磁悬浮轴承的“眼睛”与“神经”:位移传感原理深度解析
  • Linux小课堂: 从TTY到图形化终端的完整解析
  • 网站带后台免费下载搜图片找原图
  • 网站怎么快速收录wordpress 文件 钩子
  • 互联网科技公司做网站哪家好农场游戏系统开发 网站建设推广
  • PyTorch 模型部署实战:用 Flask 搭图像分类 API
  • 如何进行目的地网站建设东莞厚街创新科技职业学院
  • 网站标题修改重庆网站设计排名
  • 做图表用的网站做网站有什么工具
  • 温州做网站seophp网站开发就业前景
  • 问题记录:一个简单的字符串正则匹配算法引发的 CPU 告警
  • 公共数据资源的“整体授权”是什么涵义?
  • 如何增加网站关键词密度网站建设与维护网课
  • 建立门户网站的程序漳州企业网站建设制作
  • 汕头房产网站建设公司网站界面设计
  • [7-01-02].第05节:环境搭建 - 基础环境
  • BLIP模型
  • 网站建设添加资料搜索引擎优化seo什么意思
  • Playwright与Python:从入门到精通的完整指南
  • maven本地仓库有相应的依赖,依旧会从远程仓库拉取问题的原因及解决
  • 如何修改wordpress站景区旅游网站平台建设方案
  • 网站建设拾金手指下拉十九济南天桥区做网站的