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

synchronized关键字

文章目录

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

synchronized 关键字介绍

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

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

synchronized 的内存语义

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

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

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

相关文章:

  • MG协议转换器:破解暖通设备通讯壁垒的智能钥匙
  • 推荐的、好用的线性稳压器
  • 微信小程序实战项目001:NBA球队太阳队简介
  • 第R6周:LSTM实现糖尿病探索与预测
  • 19.4.9 数据库方式操作Excel
  • LeetCode 热门100题-无重复字符的最长子串
  • 用大模型学大模型03-数学基础 概率论 随机变量 概率分布
  • 如何在OCP部署Java应用程序
  • 在计算机视觉任务中,Transformer架构与CNN各自的优势和劣势有哪些?
  • 【Leetcode 每日一题】1552. 两球之间的磁力
  • 工业光源中的偏光板
  • ArrayList、LinkedList、Vector
  • CSS 实现下拉菜单效果实例解析
  • 什么是偏光环形光源
  • 深入浅出CSS复合选择器:掌控元素关系与层级选择
  • 【linux】在 Linux 服务器上部署 DeepSeek-r1:70b 并通过 Windows 远程可视化使用
  • Java面试第一山!《集合》!
  • 差分的性质
  • STM32 是什么?同类产品有哪些
  • 用SiliconFlow的接口调用 deepseek-ai/Janus-Pro-7B 模型生成 图像
  • 怎么弄网站/优化模型数学建模
  • 网站开发设计知乎/全网自媒体平台大全
  • 公司flash网站模板/汕尾网站seo
  • 住房和城乡建设部网站园林一级/优化什么
  • 一个新网站怎么做seo/百度无锡营销中心
  • 用爱奇艺会员做视频网站违法吗/开发一个app平台大概需要多少钱?