Synchronized修饰静态方法和修饰普通方法有什么区别呢?

欢喜 Java每日一问 发布时间:2025-06-05 09:48:37 阅读数:16996 1
下文笔者讲述"Synchronized修饰静态方法和修饰普通方法"的区别说明,如下所示
`synchronized`修饰"静态方法"和"普通方法(实例方法)主要区别
   在于【锁对象不同】
    这直接影响线程同步的范围和粒度

1.`synchronized`修饰普通方法(实例方法)

 -锁对象:当前类的实例对象(即`this`)
 -作用范围:
	   多个线程访问
	    同一个实例对象的 synchronized方法时互斥
public class Counter {
    private int count = 0;

    public synchronized void increment() {
        count++;
    }
}

多个线程调用 同一个`Counter`实例`increment()`方法时会同步
   但如果创建多个`Counter`实例
    则它们之间不会互相阻塞

2.`synchronized`修饰静态方法

 -锁对象:
    当前类Class对象(即`类名.class`)
 -作用范围:多个线程访问
    该类的所有实例的静态synchronized方法时互斥
public class Singleton {
    private static int instanceCount = 0;

    public static synchronized void createInstance() {
        instanceCount++;
    }
}
 所有线程调用 [createInstance()]  
    都会互斥执行
	 即使创建了多个 `Singleton` 实例
	 也无法并发执行该方法

Synchronized修饰静态方法和修饰普通方法区别对比表

特性 `synchronized` 普通方法 `synchronized` 静态方法
锁对象 当前实例 (`this`) 类的 Class 对象(`类名.class`)
同步范围 同一个实例的方法调用 整个类的所有实例共享
是否跨实例同步
示例场景 控制实例变量的并发修改 控制静态变量或全局资源的并发访问

Synchronized修饰静态方法和修饰普通方法使用场景说明

- 如果你要保护的是  某个对象的状态 ,
      使用 `synchronized` 修饰  实例方法 。
- 如果你要保护的是  类级别的资源(如静态变量),
     则应使用 `synchronized` 修饰  静态方法 
        	 或使用 `synchronized(类名.class)`方式控制同步。
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaProblem/202506/8474.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者