Synchronize同步锁对应锁住的对象

  1. 对于普通同步方法,锁的是 当前实例对象
java 复制代码
public class MyRunnable implements Runnable {
 
        @Override
        public void run() {
            method();
        }
 
        public synchronized void method() {
            System.out.println(Thread.currentThread().getName()+ ": 开始");
            try {
                // 睡眠
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            System.out.println(Thread.currentThread().getName()+ ": 结束");
        }
        
    public static void main(String[] args) {
        MyRunnable myRunnable = new MyRunnable();
        // 创建两个线程对象,执行 MyRunnable 任务,注意用的都是同一个MyRunnable对象启动的线程
        Thread threadA = new Thread(myRunnable,"线程A");
        Thread threadB = new Thread(myRunnable,"线程B");
        // 调用 start 会执行 run 方法
        threadA.start();
        threadB.start();
    }
}

2.对于静态同步方法,锁的是 当前类的 Class 对象

用的是不同的MyRunnable对象,但两个对象的Class是一样的,因为对应的Class对象在jvm中只存储了一份。

去除static 由于static去除了,所以当前锁住的是对象,由于创建的两个MyRunnable对象是不同的,因此锁住的不是一个对象。

  1. 对于同步方法块,锁的是 Synchronized 括号中的对象

引用于: blog.csdn.net/Iced_Sheep/...

相关推荐
白初&1 小时前
SpringBoot后端基础案例
java·spring boot·后端
计算机学姐3 小时前
基于Python的旅游数据分析可视化系统【2026最新】
vue.js·后端·python·数据分析·django·flask·旅游
该用户已不存在4 小时前
你没有听说过的7个Windows开发必备工具
前端·windows·后端
David爱编程4 小时前
深入 Java synchronized 底层:字节码解析与 MonitorEnter 原理全揭秘
java·后端
KimLiu4 小时前
LCODER之Python:使用Django搭建服务端
后端·python·django
再学一点就睡4 小时前
双 Token 认证机制:从原理到实践的完整实现
前端·javascript·后端
yunxi_054 小时前
终于搞懂布隆了
后端
用户1512905452205 小时前
Langfuse-开源AI观测分析平台,结合dify工作流
后端
南囝coding5 小时前
Claude Code 从入门到精通:最全配置指南和工具推荐
前端·后端
会开花的二叉树6 小时前
彻底搞懂 Linux 基础 IO:从文件操作到缓冲区,打通底层逻辑
linux·服务器·c++·后端