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/...

相关推荐
陈随易32 分钟前
AI时代,你还在坚持手搓文章吗
前端·后端·程序员
大鱼七成饱1 小时前
VMware NAT模式下固定内网IP(附详细图文)
后端
IT_陈寒3 小时前
Vue的这个响应式陷阱,我debug了一整天才爬出来
前端·人工智能·后端
兔子零10244 小时前
手把手教你在 Claude Code 中接入 DeepSeek-V4
后端
phenhorlin4 小时前
我做了个工具,让切换 Homebrew 镜像像切 npm 源一样简单
后端·shell
6954 小时前
两周浅学 RAG
后端
AI人工智能+电脑小能手5 小时前
【大白话说Java面试题】【Java基础篇】第24题:Java面向对象有哪些特征
java·开发语言·后端·面试
AI人工智能+电脑小能手6 小时前
【大白话说Java面试题】【Java基础篇】第25题:JDK1.8的新特性有哪些
java·开发语言·后端·面试
fliter6 小时前
Wrangler:Cloudflare 给 Rust + WASM 开发者造的那把锤子
后端
兔子零10246 小时前
Ofox AI值得用吗?
前端·javascript·后端