码迷,mamicode.com
首页 > 其他好文 > 详细

如果一个对象有多个方法加了 synchronized,那么该对象有几把锁?

时间:2019-12-27 20:01:54      阅读:86      评论:0      收藏:0      [点我收藏+]

标签:www   同步   变量   detail   个人   情况   art   不能   对象   

答案是一把锁 ??

代码示例:

public class Test {

    public synchronized void method1(){
        // do something
    }

    public synchronized void method2(){
        // do something
    }

}

对象锁是在一个类的对象上加的的锁,只有一把,不管有几个方法进行了同步。

这些同步方法都共有一把锁,只要一个线程获得了这个对象锁,其他的线程就不能访问该对象的任何一个同步方法。

对象锁:

synchronized 修饰实体里的非静态变量,锁的是对象

synchronized 修饰代码块,锁的是对象

synchronized 修饰非静态方法,锁的是对象

使用对象锁的情况,只有使用同一对象的线程才会受锁的影响,多个对象调用同一方法也不会受影响。

类锁:

synchronized 修饰类中的静态变量

synchronized 修饰静态方法

synchronized 修饰类.class

类锁是所有线程共享的锁,所以同一时刻,只能有一个线程使用加了锁的方法或方法体,不管是不是同一个实例。

参考文章:

https://blog.csdn.net/qa275267067/article/details/79804713

https://www.cnblogs.com/fengzheng/p/12066239.html

本文由博客一文多发平台 OpenWrite 发布!
个人公众号《骇客与画家》,欢迎关注

如果一个对象有多个方法加了 synchronized,那么该对象有几把锁?

标签:www   同步   变量   detail   个人   情况   art   不能   对象   

原文地址:https://www.cnblogs.com/gaohanghang/p/12108789.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!