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对象。

相关文章
|
2月前
|
Java
锁对象
锁对象
125 73
|
6月前
|
Kubernetes Cloud Native 持续交付
构建未来:云原生架构在企业数字化转型中的关键角色
【5月更文挑战第7天】 随着企业加速数字化转型,云原生架构已成为推动创新和敏捷性的重要驱动力。本文将深入探讨云原生技术的基本原理,以及如何利用这些技术实现业务灵活性和响应速度的显著提升。通过分析微服务、容器化、持续集成/持续部署(CI/CD)等关键组件,我们将揭示云原生架构如何帮助企业应对快速变化的市场需求,同时确保系统的稳定性和可扩展性。
|
6月前
|
缓存 安全 Java
初识String类
初识String类
|
NoSQL 关系型数据库 索引
从一个案例深入剖析InnoDB隐式锁和可见性判断(1)
从一个案例深入剖析InnoDB隐式锁和可见性判断
从一个案例深入剖析InnoDB隐式锁和可见性判断(1)
|
SQL 关系型数据库 MySQL
从一个案例深入剖析InnoDB隐式锁和可见性判断(2)
从一个案例深入剖析InnoDB隐式锁和可见性判断
从一个案例深入剖析InnoDB隐式锁和可见性判断(2)
|
存储 关系型数据库 MySQL
从一个案例深入剖析InnoDB隐式锁和可见性判断(4)
从一个案例深入剖析InnoDB隐式锁和可见性判断
|
关系型数据库 MySQL 索引
从一个案例深入剖析InnoDB隐式锁和可见性判断(3)
从一个案例深入剖析InnoDB隐式锁和可见性判断
|
Oracle Java 关系型数据库
使用jol查看synchronized锁信息
使用jol查看synchronized锁信息
406 0