首先,Java中synchronized可以实现对对象加互斥锁。
其次,我们来聊一聊synchronized互斥锁的实现原理。Java虚拟机中,synchronized支持的同步方法和同步语句都是使用monitor来实现的。每个对象都与一个monitor相关联,当一个线程执行到一个monitor监视下的代码块中的第一个指令时,该线程必须在引用的对象上获得一个锁,这个锁是monitor实现的。在HotSpot虚拟机中,monitor是由ObjectMonitor实现,使用C 编写实现,具体代码在HotSpot虚拟机源码ObjectMonitor.hpp文件中。
查看源码会发现,主要的属性有_count(记录该线程获取锁的次数)、_recursions(锁的重入次数)、_owner(指向持有ObjectMonitor对象的线程)、_WaitSet(处于wait状态的线程集合)、_EntryList(处于等待锁block状态的线程队列)。
当并发线程执行synchronized修饰的方法或语句块时,先进入_EntryList中,当某个线程获取到对象的monitor后,把monitor对象中的_owner变量设置为当前线程,同时monitor对象中的计数器_count加1,当前线程获取同步锁成功。
当synchronized修饰的方法或语句块中的线程调用wait()方法时,当前线程将释放持有的monitor对象,monitor对象中的_owner变量赋值为null,同时,monitor对象中的_count值减1,然后当前线程进入_WaitSet集合中等待被唤醒。
谢邀!
Java语言规范中明确指出如果锁住的对象是null,则会NullPointerException,规范内容如下:
The type of Expression must be a reference type, or a compile-time error occurs. A synchronized statement is executed by first evaluating the Expression. Then: If evaluation of the Expression completes abruptly for some reason, then the synchronized statement completes abruptly for the same reason. Otherwise, if the value of the Expression is null, a NullPointerException is thrown.
好听的音乐网站有哪些?虾,酷狗,银月台http://www.hao123.com/music.htm第1章开发概述1.1:项目介绍1.2开发环境及需求1.3 ASP及相关技术介绍1.4 ASP与CGI的比较第2章需求分析2.1:系统调研2.
怎样建一个网站?普通网站的建设费用和维护费用是多少?域名基本免费,只需要一个服务器。以阿里巴巴云和腾讯云为例。最便宜的网站服务器价格也不贵,一年近500元,作为公司发布信息当然可以。同时支持1000人,基本够用。网站建设代码基本模板,有相关
怎样在多个cpp文件中引入同一个全局变量?c语言,不同的函数中可以使用相同名字的变量吗?函数:1。C语言不能在同一语言中定义具有相同名称的函数。C文件,即使是重载的,因为C语言不支持重载,所以链接时会报错。2通常,同名函数不能在不同的函数中
有电商商品详情页面的免费模板素材网站推荐吗?您可以尝试多重搜索、视觉狩猎、pixabay、pexels等。pexels网站的材料足够清晰,格式非常合适。最重要的是,它没有版权纠纷。Pixabay有很多免费的视频资料。VisualHunt最大
Java入门到精通需要多长时间?我的学生嘲笑“Java从入门到放弃”、“Java从入门到失败”、“Java从入门到坟墓”,这在一定程度上反映了编程语言的难度。从一开始到精通,常常有一种说法是这本书很吸引眼球。我认为java学习只是从头开始。
DW网页制作问题:怎样去掉表格线?怎么删除Word表格外面的边框,就是左右两条线?在职场,大家都会用这个词。在word表中,可以删除表中的某些区域。有两种删除左右行的方法选择我们的表。如果是2007以上的版本,则会在顶部显示一个布局选项,您
为什么有人说建设网站必须去购买域名呢?如果它只是一个静态博客网站,你不需要购买域名。您可以使用一些提供博客服务的网站的辅助域名。域名只能是主域名下的次域名,域名不是可选的。如果您想部署自己的服务,最好购买域名。你为什么这么说?其实没有域名,
如何使用java读取excel?这里是一个简单的介绍。有两种方法,一种是基于JXL读取Excel,另一种是基于poi读取Excel。这两种方法非常简单,代码量也不多。下面我就来介绍一下实现过程,实验环境win10jdk1.8eclipse,
苹果12要套壳吗?苹果12需要外壳吗是的,不管手机有多硬,都无法避免来自环境的各种摩擦。带外壳,可避免手机磨损,保护手机摄像头
官方帐户不需要域名。但是,如果开设了官方账户,则可能需要官方账户。它应该是微信公众号的网址必须是注册域名,否则就无法访问。去爱艾米看看。微信公众号需要域名吗?哈哈,很高兴见到你。谢谢你的邀请!没钱,嘻嘻!哈哈,谢谢你。微信公众号接入的URL