讲师中心 微信公众号

工具推荐

视频效率加速
AniShort
AniShort

AI短剧协同制作平台

Seko
Seko

AI短剧一键生成成片

立刻MV
立刻MV

低成本歌曲 MV、视频生成

Laper
Laper

剧本策划到成片协作

在Java中使用synchronized修饰方法有什么影响_锁粒度分析

大芳姑娘_2795

大芳姑娘_2795

发布时间:2025-12-20 14:27:25

|

786人浏览过

|

来源于php中文网

原创

synchronized修饰方法时,实例方法锁住当前对象(this),静态方法锁住当前Class对象;锁粒度影响并发性能,实例锁支持多对象并行,类锁全局互斥;二者正交,可重入,异常自动释放锁。

在java中使用synchronized修饰方法有什么影响_锁粒度分析

synchronized 修饰方法时,本质是给当前对象(非静态方法)或当前类(静态方法)加锁,影响核心在于锁的粒度、并发性能和线程安全边界。锁粒度越粗,并发度越低;越细,控制越精确但实现成本可能上升。

实例方法加synchronized:锁住当前对象(this)

每个对象实例拥有独立的锁。不同对象调用同一synchronized实例方法,互不阻塞;同一对象的多个synchronized方法调用会串行执行。

  • 等价于在方法体首尾加上 synchronized(this) { ... }
  • 若一个对象有 A() 和 B() 两个 synchronized 方法,线程1调用 A() 未返回前,线程2无法进入该对象的 B()
  • 注意:普通方法、static 方法、其他对象的 synchronized 方法不受影响

静态方法加synchronized:锁住当前Class对象

锁的是 MyClass.class,属于类级别锁。所有该类的实例共享同一把锁,粒度比实例锁更粗。

Java调试
Java调试

通过 JDWP 实现 Java 远程调试:连接远程 JVM、设置断点、单步执行代码、查看变量值、获取调用栈。适用于需要调试远程 Java 应用、排查运行时状态、追踪代码执行流程的场景。 术语注解 JDWP:Java Debug Wire Protocol,Java 调试有线协议(Java 远程调试底层通信协议) remote JVM:远程 Java 虚拟机 step through code:代码单步调试(步入 / 步过 / 步出调试) inspect variables:变量查看 / 变量检视 stac

下载
  • 等价于 synchronized(MyClass.class) { ... }
  • 即使创建了100个对象,只要有一个线程在执行某个 synchronized static 方法,其余所有线程都无法进入该类的任意 synchronized static 方法
  • 与实例方法锁完全正交:静态方法锁不影响实例方法执行,反之亦然

锁粒度对比与选型建议

选择取决于数据共享范围和并发需求:

立即学习“Java免费学习笔记(深入)”;

  • 操作的是实例成员变量 → 优先用 synchronized 实例方法(或 this 锁块)
  • 操作的是类共享状态(如计数器、缓存、配置)→ 考虑 synchronized static 方法(或 Class 锁块)
  • 只锁部分逻辑,而非整个方法 → 改用同步代码块,明确指定锁对象,避免无谓阻塞
  • 高并发场景下,粗粒度锁易成瓶颈,可考虑 ReentrantLock、分段锁(如 ConcurrentHashMap)、无锁设计(CAS)等替代方案

常见误区提醒

容易忽略但影响实际行为的关键点:

  • synchronized 方法无法被继承重写“自动同步”:子类重写后默认不带 synchronized,需显式添加
  • 构造方法不能用 synchronized 修饰(编译报错),对象初始化本身不具备原子性保障,需自行同步关键字段赋值
  • 锁不可重入?错——synchronized 是可重入锁,同一个线程可多次获取同一把锁(如 synchronized 方法内部调用另一个本对象的 synchronized 方法)
  • 异常不会导致锁泄漏:无论是否抛出异常,锁都会在方法退出时自动释放

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

相关专题

更多
class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

4516

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

326

2025.12.06

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

4758

2023.08.10

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

60

2026.11.06

Postman请求头Headers怎么设置
Postman请求头Headers怎么设置

围绕Postman HTTP请求头配置展开,讲解Headers选项的具体使用方式,包括Key和Value参数填写、请求头信息添加、常见Header字段设置及请求头修改方法,帮助用户解决接口调试过程中遇到的请求头配置问题。

20

2026.11.06

Postman接口请求发送教程
Postman接口请求发送教程

详细介绍Postman接口请求的创建与发送方法,涵盖GET和POST请求、URL配置、请求参数、Headers请求头、Body请求体设置以及响应结果查看,帮助用户掌握Postman接口请求的完整操作流程。

40

2026.11.06

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

60

2026.11.05

DBeaver安全防护教程大全
DBeaver安全防护教程大全

DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。

40

2026.11.05

DBeaver连接创建与配置教程
DBeaver连接创建与配置教程

本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。

40

2026.11.04

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn