验证synchronized加在方法上,锁住的对象类别。

最近看偶然看了别人的面经问到了synchronized的相关问题,想起了以前看过的:synchronized加在方法上,锁住的是类实例,然后还记得有个锁住的是类的.class对象。
但那时候只是看了看,记忆并不深,现在突然看到,便想着自己写一份demo去验证一下,synchronized加载方法上时,究竟锁住了写什么,验证Demo如下:

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值