2016 - 2024

感恩一路有你

java对象锁和类锁区别 java synchronized锁对象,当对象引用是null的时候,锁的是什么?

浏览量:1522 时间:2021-03-19 16:01:56 作者:admin

java synchronized锁对象,当对象引用是null的时候,锁的是什么?

谢谢

!Java语言规范明确指出,如果锁定的对象为null,则会发生NullPointerException。规范的内容如下:

表达式的类型必须是引用类型,否则会发生完全时间错误。首先计算表达式,执行同步语句。那么:如果表达式的求值由于某种原因完全完成,那么synchronized语句complete也完全出于同样的原因。否则,如果表达式的值为null,则会引发NullPointerException。

java哪个关键字可以对对象加互斥锁?

首先,synchronized可以在Java中的对象上实现互斥锁。

其次,我们来谈谈同步互斥的实现原理。在Java虚拟机中,synchronized支持的同步方法和同步语句由monitor实现。每个对象都与一个监视器相关联。当线程执行监视器监视的代码块中的第一条指令时,该线程必须获得被引用对象的锁,该锁由监视器实现。在hotspot虚拟机中,监视器由objectmonitor实现,用C语言编写,具体代码在hotspot虚拟机的源代码中对象监视器.hpp文件。

如果查看源代码,您会发现主要属性是uCount(记录线程获取锁的次数)Recursions(锁重入次数)Owner(指向持有objectmonitor对象的线程)Waitset(线程集处于等待状态)Entrylist(线程队列等待锁块)。

当并发线程执行同步修饰的方法或语句块时,它首先进入entrylist中的,当线程获得对象的监视器时,owner变量设置为当前线程,监视器对象中的计数器计数加1,当前线程成功获取同步锁。

当同步修饰的方法或语句块中的线程调用wait()方法时,当前线程将释放保留的监视器对象,同时,uCount值减1,然后当前线程进入waitset集合中的Waiting等待唤醒。

java对象锁和类锁区别 java四种锁机制 java同步代码块锁对象

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。