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

相关推荐
老华带你飞13 小时前
建筑材料管理|基于springboot 建筑材料管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·学习·spring
Linux编程用C14 小时前
Docker+Vscode搭建(本地/远程)开发环境
vscode·后端·docker
用户219916797039114 小时前
.Net通过EFCore和仓储模式实现统一数据权限管控并且相关权限配置动态生成
后端·github
用户479492835691514 小时前
node_modules 太胖?用 Node.js 原生功能给依赖做一次大扫除
前端·后端·node.js
开心就好202514 小时前
苹果iOS设备免越狱群控系统完整使用指南与应用场景解析
后端
ss27315 小时前
SpringBoot+vue养老院运营管理系统
vue.js·spring boot·后端
用户83562907805115 小时前
使用 C# 高效解析 PDF 文档:文本与表格提取实战指南
后端·c#
zhangyifang_00915 小时前
Spring中的BeanFactory类
java·后端·spring
掘金一周15 小时前
【用户行为监控】别只做工具人了!手把手带你写一个前端埋点统计 SDK | 掘金一周 12.18
前端·人工智能·后端
开心就好202515 小时前
iOS App 加固方法的实际应用,安全不再只是源码问题
后端