前言:
今天姐妹们对“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对象锁和类锁全面解析