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

synchronized关键字

文章目录

  • synchronized 关键字介绍
  • synchronized 的内存语义

synchronized 关键字介绍

synchronized 块是 Java 提供的一种原子性 内 置锁, Java 中的每个对象都可以把它当作一个 同步锁来使用 , 这些 Java 内置的使用者看不到的锁被称为内部锁 ,也 叫作监视器锁。线程的执行代码在进入 synchronized 代码块前会自动获取内部锁,这时候其他线程访 问 该同步代码块时会被阻塞挂起。拿到内部锁的线程会在正常退出同步代码块或者抛出 异常后或者在 同步块 内 调用了该 内置锁资源的 wait 系列方法时释放该 内置锁内置锁是排它锁 ,也就是当一个线程获取这个锁后 , 其他线程必须等待该线程释放锁后才能获取该锁 。

另外,由于 Java 中的线程是与操作系统的原生线程一一对应的,所以当阻塞一个线
程时伞,需要从用户态切换到内核态执行阻塞操作,这是很耗时的操作,而synchronized 的使用就会导致上下文切换。

synchronized 的内存语义

共享变量 内存可见性问题主要是由于线程的工作内存导致的,下面我们来讲解 synchronized 的一个内存语义,这个内存语义就可以解决共享变量内存可见性问题 。进入 synchronized 块的内存语义是把在 synchronized 块内使用到的变量从线程的工作内存中清除这样在 synchronized 块内使用到该变量时就不会从线程的工作内存中获取,而是直接从主内存中获取退出 synchronized 块的内存语义是把在 synchronized 块内对共享变量的修改刷新到主内存

其实这也是加锁和释放锁的语义,当获取锁后会清空锁块内本地内存中将会被用到的共享变量,在使用这些共享变量时从主 内 存进行加载,在释放锁时将本地内存中修改的共享变量刷新到主内存 。

除可以解决共享变量 内存可见性问题外, synchronized 经常被用来实现原子性操作 。
另外请注意, synchronized 关键字会引起线程上下文切换并带来线程调度开销 。


http://www.kler.cn/a/546671.html

相关文章:

  • 【第2章:神经网络基础与实现——2.3 多层感知机(MLP)的构建与调优技巧】
  • 小小小病毒(3)(~_~|)
  • java.lang.IllegalArgumentException: 在请求目标中找到无效字符。有效字符在RFC 7230和RFC 3986中定义
  • 初学总结SpringBoot项目在mac上环境搭建和运行
  • 每日一题——最长公共子序列
  • gitcode使用导航
  • ProxySQL构建PolarDB-X标准版高可用路由服务三节点集群
  • 盛铂科技SWFA200捷变频频率综合器:高速跳频与卓越性能的完美结合
  • flutter常见面试题(欢迎私信投稿——更新到10)
  • 华为手机鸿蒙4回退到鸿蒙3到鸿蒙2再回退到EMUI11 最后关闭系统更新
  • 独立C++ asio库实现的UDP Client
  • 鸿蒙Next开发-添加水印以及点击穿透设置
  • 在带有Intel NPU的Windows上安装IPEX-LLM
  • RadASM环境,win32汇编入门教程之三
  • 基于Ceedling的嵌入式软件单元测试
  • 数字图像基础:像素、分辨率、灰度图像与彩色图像
  • 【代码随想录】刷题记录(115)-岛屿数量(广搜)
  • Vue3 从入门到精通:全面掌握前端框架的进阶之路
  • Java 设计模式之组合模式
  • Windows 图形显示驱动开发-WDDM 2.0 -Gpu段