同步方法与同步块那个是更好选择

发布时间:2026/10/25 16:21:15

同步方法与同步块那个是更好选择 在java 开发中我们在使用synchronized关键字对同步数据进行加锁时有两种写法一是同步方法另一种时同步方法块。代码如下/** * author Evan Walker * version 1.0 * desc 昂炎数据 https://www.ayshuju.com/home * date 2023/03/23 22:22:50 */ public class SynchronizeDemo { Object lock new Object(); /** * 第一种锁住整个静态method 类锁同步方法 */ public static synchronized void synchronizedMethodA() { //业务代码 } /** * 第一种相当于用类对象锁住代码块 类锁同步代码块 */ public static void synchronizedBlockA() { synchronized (SynchronizeDemo.class) { //业务代码 } } /** * 第二种使用一个互斥对象锁住代码块它可以这么理解多个线程想访问互斥代码块必须拿到mutex对象的锁。 * 然后后面的所有类型都可以用第一种类型来解释同步代码块 */ public void synchronizedBlockB() { synchronized (lock) { // 业务代码 } } /** * 第三种锁住整个非静态method 同步方法 */ public synchronized void synchronizedMethodC() { //业务代码 } /** * 第三种相当于用this对象来锁住方法同步代码块 */ public void synchronizedBlockC() { synchronized (this) { //业务代码 } } }上述代码描述了几种同步方法和同步代码块的写法。同步方法与同步块的区别同步方法同步方法直接在方法上加 synchronized 实现加锁。同步方法块同步代码块则在方法内部加锁在起方法内部实现synchronized关键字。同步方法与同步块那个是更好的选择同步代码块是更好的选择因为它不会锁住整个对象当然你也可以让它锁住整个对象意味着同步块之外的代码是异步执行的效率会更高。同步方法会锁住整个对象哪怕这个类中有对各不相关联的同步块这通常会导致他们停止执行并需要等待获取这个对象上的锁。同步代码块更要符合开放调用原则只在需要锁住的代码块锁住相应的对象这样从侧面来说可以避免死锁。请知道这样一条原则同步的范围越小越好。但也有例外Java锁粗化虽说同步的范围越少越好但在 Java 虚拟机中存在着一种叫做锁粗化的优化方法这种方法是把同步范围变大。比方说 StringBuffer 它是一个线程安全的类自然最常用的 append() 方法是一个同步方法写代码的时会反复 append 字符串这意味着要进行反复的加锁 - 解锁这对性能不利这意味着 Java 虚拟机在这条线程上要反复地在内核态和用户态之间进行切换因此 Java 虚拟机会将多次 append 方法调用的代码进行一个锁粗化的操作将多次的 append 的操作扩展到 append 方法的头尾变成一个大的同步块这样就减少了加锁 -- 解锁的次数有效地提升了代码执行的效率。
延伸阅读

更多相关文章

2026/10/25 7:12:54

界面控件DevExpress WPF拥有丰富SVG图像库,更好支持高DPI显示器

DevExpress WPF拥有120个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。DevExpress新旧版本帮助…

2026/10/25 5:18:48

前端常见的基本数据类型

摘要:JavaScript 有 5 种简单基本数据类型,本篇结合思维导图梳理 number、string、boolean、undefined、null 核心知识点,适合前端入门复习。一、前言JS 的基本数据类型也叫原始值类型,日常写代码处处都会用到。把这几个基础类型搞…

2026/10/25 16:19:48

t3code:跨端开发的CLI协同协议,统一Web/Electron/iOS工作流

1. 项目概述:t3code 是什么?它解决的不是“工具问题”,而是“开发流断裂”本身t3code 这个名字乍看像某个小众 CLI 工具的代号,但结合当前高频热搜词——CLI、Electron、web app、iOS——它实际指向一个正在快速成型的跨端开发工作…

2026/10/25 16:19:48

CLF-C02备考核心:服务域-责任链-成本动因三维知识图谱

简介:本资源是面向云计算初学者与AWS认证备考者的CLF-C02官方考试知识点精要整理PDF,聚焦AWS Certified Cloud Practitioner核心能力要求,覆盖DynamoDB低延迟数据存储、Snowball Edge免费数据迁移、Inspector安全评估、AWSCAF治理与可持续性视…

2026/10/25 16:19:48

OpenCV 4.4.0 编译产物拆解:库文件命名、链接与避坑指南

简介:本资源面向在Windows平台使用Visual Studio进行OpenCV二次开发与编译的工程师及学习者,提供opencv-4.4.0完整编译产物与依赖文件,解决离线编译时第三方组件下载失败、库文件缺失等常见问题。压缩包共575个文件,约156.61MB&am…

2026/10/25 16:19:48

C#跨平台客户端fog-client:系统采集、任务执行与上报实战解析

简介:fog-client是一款基于C#开发的跨平台计算机管理客户端,面向系统管理员与IT运维人员,解决Windows、Linux、macOS环境下的远程集中管理问题。资源包为zip格式,共304个文件,压缩包整体仅7.7MB,文件类型以…

2026/10/25 16:14:47

领域模型代码示例:业务规则如何住进聚合根

简介:面向DDD实践者的完整领域模型示例工程,定位于帮助开发者通过可运行代码理解实体、值对象、聚合、领域服务与领域事件等核心概念,适合正在学习领域驱动设计或需要落地微服务业务建模的初中级后端工程师。压缩包内含126个文件,…

2026/10/25 0:02:22

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/25 0:02:23

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/25 0:02:23

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/25 0:02:22

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/25 0:02:23

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/25 0:02:23

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑