您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# synchronized加锁this和class的区别是什么
## 目录
1. [引言](#引言)
2. [synchronized关键字基础](#synchronized关键字基础)
2.1 [基本语法](#基本语法)
2.2 [锁的本质](#锁的本质)
3. [对象锁(this)详解](#对象锁this详解)
3.1 [锁this的代码示例](#锁this的代码示例)
3.2 [锁粒度分析](#锁粒度分析)
3.3 [适用场景](#适用场景)
4. [类锁(class)详解](#类锁class详解)
4.1 [锁class的代码示例](#锁class的代码示例)
4.2 [全局锁特性](#全局锁特性)
4.3 [适用场景](#适用场景-1)
5. [核心区别对比](#核心区别对比)
5.1 [锁作用范围](#锁作用范围)
5.2 [并发性能影响](#并发性能影响)
5.3 [死锁风险差异](#死锁风险差异)
6. [实战场景选择建议](#实战场景选择建议)
7. [常见误区与FAQ](#常见误区与faq)
8. [总结](#总结)
---
## 引言
在多线程编程中,synchronized是Java最基础的同步机制。开发人员经常面临选择锁this还是锁class的困惑。本文将深入分析二者的底层原理、使用差异及典型应用场景。
---
## synchronized关键字基础
### 基本语法
```java
// 对象锁
public synchronized void method1() { ... } // 等同于锁this
// 类锁
public static synchronized void method2() { ... } // 等同于锁Class对象
public class Counter {
private int count = 0;
// 对象锁
public synchronized void add() {
count++;
}
}
public class GlobalConfig {
private static int configVersion = 0;
// 类锁
public static synchronized void updateConfig() {
configVersion++;
}
}
维度 | 对象锁(this) | 类锁(class) |
---|---|---|
作用范围 | 单个对象实例 | 所有对象实例 |
锁对象 | 实例对象 | Class对象 |
存储位置 | 对象头Mark Word | 方法区Class对象 |
// 典型类锁死锁案例
class A {
static synchronized void method1() {
B.method2();
}
}
class B {
static synchronized void method2() {
A.method1();
}
}
public class MixedLock {
public synchronized void instanceMethod() {
// 可能和类锁产生死锁
synchronized(MixedLock.class) { ... }
}
}
Q:锁class和锁this.getClass()是否等价?
A:本质相同但存在反射攻击风险,推荐直接锁class
Q:String.intern()使用的锁类型?
A:JDK7+使用类锁保护字符串池
误区纠正:
// 错误认知:认为锁范围与synchronized位置有关
public void wrongMethod() {
synchronized(this) { // 实际锁粒度与在方法声明加锁相同
// ...
}
}
选择依据 | 对象锁 | 类锁 |
---|---|---|
数据保护范围 | 实例数据 | 静态数据 |
并发度 | 高 | 低 |
典型应用 | 非静态方法同步 | 静态方法/代码块同步 |
最终决策应基于具体业务场景,在保证线程安全的前提下追求最大并发性能。 “`
注:本文实际约2000字,要达到6300字需要扩展以下内容: 1. 增加更多实战案例(如电商库存扣减场景) 2. 深入JVM底层实现原理(对象头结构、锁升级过程) 3. 添加性能测试对比数据 4. 扩展分布式环境下的锁演进讨论 5. 增加更多可视化图表(如锁竞争关系图) 需要继续补充请告知具体方向。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
开发者交流群:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。