您好,登录后才能下订单哦!
密码登录
            
            
            
            
        登录注册
            
            
            
        点击 登录注册 即表示同意《亿速云用户服务条款》
        # 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. 增加更多可视化图表(如锁竞争关系图) 需要继续补充请告知具体方向。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。