尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

synchronized 锁的用法

synchronized 锁的用法
📅 发布时间:2026/7/16 18:33:18

目录

一. synchronized 实现同步代码块

二. synchronized 同步代码块的特点

三. synchronized 同步代码块的使用细节

四. synchronized 实现同步方法

五. 同步方法的注意事项

六. StringBuffer类 与 synchronized 的关系


一. synchronized 实现同步代码块

在 Java 中,当多个线程共享一个临界资源的时候,就会出现抢夺临界资源的情况,为了保证线程安全的执行,我们就需要做出一些应对措施。syschronized 锁就可以实现同步代码块实现线程安全,我们只需要将临界资源锁起来,让一个线程想要访问该临界资源时,需要先获取到锁才能进行操作,否则就要等待。

同步代码块的格式如下图所示,由 synchronized 和锁对象以及括号内部的代码整体通常就称之为同步代码块;

二. synchronized 同步代码块的特点

(1)没有线程执行代码块时,锁默认是开放的,一旦有一个线程来执行同步代码块,锁自动关闭,其他线程必须阻塞等待;

(2)一个线程在拿到锁执行同步代码块时,只有全部执行完毕线程才会出来,锁会自动释放。

三. synchronized 同步代码块的使用细节

synchronized 的锁对象一定要是唯一的,因为一个线程能不能执行同步代码块,就是要判断该线程是否拥有当前锁对象,如果一个同步代码块的锁对象不是唯一的,有A和B两个锁对象,那么线程1获取到锁对象A去执行同步代码块,线程2获取锁对象B执行同步代码块,就有可能会产生线程冲突,造成线程安全问题。

在实际开发过程中,我们通常可以使用类的字节码文件对象作为锁对象,因为当前类的字节码文件对象就是唯一的。

四. synchronized 实现同步方法

同步方法和同步代码块实现极其相似,同步代码块我们是把一段代码使用 synchronized 锁了起来,而同步方法则同理,它是直接将 synchronized 加在了方法上,与 public,static 等修饰符一并写就可以了,如下所示

五. 同步方法的注意事项

(1)同步方法锁住的是整个方法里面的代码;

(2)同步方法的锁对象是不需要我们自己指定的,Java 已经帮我们指定好了。如果当前同步方法是静态方法,则当前锁对象是当前类的字节码文件对象;如果当前同步方法是非静态方法,则锁对象是 this ,即当前方法的调用者。

六. StringBuffer类 与 synchronized 的关系

我们知道,Java 中的字符串是不可变的,而 StringBuilder 和 StringBuffer 的类对象则是可变的,这两个类的作用几乎完全一样,最大的区别就是 StringBuffer 类中的方法都有 synchronized 锁,如下图所示部分源码

所以,StringBuffer 是线程安全的,而 StringBuilder 是线程不安全的;当我们的程序是多线程时,建议使用 StringBuffer 不使用 StringBuilder,如果是单线程的,使用 StringBuilder 效率更高。

相关新闻

  • 毕设开源 深度学习情感分类算法系统(源码+论文)
  • Unity Hub启动卡顿?修改JS文件实现秒级启动的硬核方案
  • 用AI识别项目范围的隐性膨胀(Scope Creep)模式:从被动应对到主动预警

最新新闻

  • PS4 11.00系统漏洞利用技术深度解析:jailbreak-11实验性工具架构与实现原理
  • Gemma-4-e4b-it-mxfp8未来展望:多模态AI的发展趋势与路线图
  • kylin-user-guide完全解析:UKUI桌面环境必备的文本指南工具
  • NURBS-Python API详解:自定义几何操作与算法扩展手册
  • 终极指南:用DDrawCompat在现代Windows上完美运行经典DirectX游戏
  • Agent 流式输出设计:让用户实时看到 Agent 的思考和执行过程

日新闻

  • Toon Boom Harmony 高效工作流:从节点视图到镜头标记的实战技巧
  • 真力时售后维修电话,为您提供专业腕表保养与故障修复服务权威公示(2026年7月最新) - 亨得利官方服务中心
  • 【C++】类和对象--构造函数进阶(初始化列表与explicit)

周新闻

  • IX9104 PCIe5.0 高速交换芯片@ACP#完整规格 + 应用场景总结
  • Unity游戏集成Coze智能体:实现NPC智能对话与知识库联动
  • SAP EPIC 建行回单查询:从标准类CL_EPIC_EXAMPLE_CN_CCB_GHTD到Z类的5处关键修改

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号