龙空技术网

Java 中 方法锁、对象锁和类锁区别

架构修炼师 107

前言:

今天姐妹们对“java对象锁和类锁全面解析”可能比较关心,大家都想要知道一些“java对象锁和类锁全面解析”的相关资讯。那么小编也在网摘上收集了一些对于“java对象锁和类锁全面解析””的相关内容,希望大家能喜欢,咱们一起来学习一下吧!

今天我们来简单聊下一个Java中锁的知识点,需要结合synchronized进行分析。

synchronized 用来处理多个线程同时访问同一个类的一个代码块、方法、甚至是这个类。

修饰代码块 需要一个reference对象作为锁的对象。修饰方法时,默认是当前对象作为锁的对象修饰类时,默认当前类的Class对象作为锁的对象1、对象锁

当一个对象中有同步方法或者同步块时,线程调用此对象进入该同步区域时,必须获得对象锁。

如果此对象的对象锁被其他调用者占用,则进入阻塞队列,等待此锁被释放(同步块正常返回或者抛异常终止,由JVM自动释放所)

注意,方法锁也是一种对象锁,当一个线程访问一个带synchronized方法时,由于对象锁的存在,所有加synchronized的方法都不能被访问,(前提是在多个线程调用的是同一个对象实例中的方法)

public class Locker {    public synchronized void test(){        System.out.println("对象锁也是方法锁");    }}
public class Locker {    public void method(){        synchronized(this){            System.out.println("对象锁,方法还是可以进来");        }    }}

2、类锁

静态方法和静态变量都是属于类级别的,只会加载和初始化一份。静态方法一旦被声明为 synchronized,那么该类所有实例化对象共用一把锁,即类锁,如下两种方式:

public class Locker {    public static synchronized void method(){        System.out.println("类锁");    }}
public class Locker {    public void method(){        synchronized (object.this) {            System.out.println("类锁");        }    }}

标签: #java对象锁和类锁全面解析