synchronized锁住的对象类别

简介: synchronized锁住的对象类别

前言


最近在看Java并发编程实战的一书,发现了一个很有意思的问题,以前没有想过的问题:synchronized加在方法上,锁上的对象是什么呢?


正文


public class Lock {
    //验证synchronized写在普通方法上的锁所住的是类对象
    public synchronized  void method1(){
        try{
            System.out.println("invoke in method1()");
            Thread.sleep(5000);
        }catch (InterruptedException e){
        }
    }
    public void method2(){
        Object o = new Object();
        System.out.println("invoke in method2()");
        synchronized (this){
            System.out.println("now invoke in method2():synchronized block");
        }
    }
//    method3、4验证加载静态方法上的synchronized锁住的是该类的.class对象
    public synchronized static void method3(){
        try{
            System.out.println("invoke in method3()");
            Thread.sleep(5000);
        }catch (InterruptedException e){
        }
    }
    public static void method4(){
        System.out.println("invoke in method4()");
        synchronized (Lock.class){
            System.out.println("now invoke in method4():synchronized block");
        }
    }
    public static void main(String[] args){
        Lock l = new Lock();
//        注释的两组为同一组实验
//        new Thread(()->l.method1()).start();
//        new Thread(()->l.method2()).start();
//        未注释的两组为同一组实验
        new Thread(()->method3()).start();
        new Thread(()->l.method4()).start();
//        验证语法基于JDK8,低于JDK8的版本可写成如下形式
//        new Thread(){
//            @Override
//            public void run() {
////             你的代码逻辑,如:
//                l.method1();
//            }
//        }.start();
    }
}

有上面的代码可以知道,sychronized加在普通方法上时,锁住的是该类的实例对象;synchronized加在静态方法上时,锁住的是该类的.class对象。

相关文章
|
7月前
|
Kubernetes Cloud Native 持续交付
构建未来:云原生架构在企业数字化转型中的关键角色
【5月更文挑战第7天】 随着企业加速数字化转型,云原生架构已成为推动创新和敏捷性的重要驱动力。本文将深入探讨云原生技术的基本原理,以及如何利用这些技术实现业务灵活性和响应速度的显著提升。通过分析微服务、容器化、持续集成/持续部署(CI/CD)等关键组件,我们将揭示云原生架构如何帮助企业应对快速变化的市场需求,同时确保系统的稳定性和可扩展性。
|
7月前
|
缓存 安全 Java
初识String类
初识String类
|
SQL 关系型数据库 MySQL
从一个案例深入剖析InnoDB隐式锁和可见性判断(2)
从一个案例深入剖析InnoDB隐式锁和可见性判断
148 0
从一个案例深入剖析InnoDB隐式锁和可见性判断(2)
|
NoSQL 关系型数据库 索引
从一个案例深入剖析InnoDB隐式锁和可见性判断(1)
从一个案例深入剖析InnoDB隐式锁和可见性判断
152 0
从一个案例深入剖析InnoDB隐式锁和可见性判断(1)
|
关系型数据库 MySQL 索引
从一个案例深入剖析InnoDB隐式锁和可见性判断(3)
从一个案例深入剖析InnoDB隐式锁和可见性判断
120 0
|
存储 关系型数据库 MySQL
从一个案例深入剖析InnoDB隐式锁和可见性判断(4)
从一个案例深入剖析InnoDB隐式锁和可见性判断
143 0
|
JavaScript 前端开发 程序员
|
3天前
|
调度 云计算 芯片
云超算技术跃进,阿里云牵头制定我国首个云超算国家标准
近日,由阿里云联合中国电子技术标准化研究院主导制定的首个云超算国家标准已完成报批,不久后将正式批准发布。标准规定了云超算服务涉及的云计算基础资源、资源管理、运行和调度等方面的技术要求,为云超算服务产品的设计、实现、应用和选型提供指导,为云超算在HPC应用和用户的大范围采用奠定了基础。
150926 17
|
11天前
|
存储 运维 安全
云上金融量化策略回测方案与最佳实践
2024年11月29日,阿里云在上海举办金融量化策略回测Workshop,汇聚多位行业专家,围绕量化投资的最佳实践、数据隐私安全、量化策略回测方案等议题进行深入探讨。活动特别设计了动手实践环节,帮助参会者亲身体验阿里云产品功能,涵盖EHPC量化回测和Argo Workflows量化回测两大主题,旨在提升量化投研效率与安全性。
云上金融量化策略回测方案与最佳实践