当前位置:首页 > TAG信息列表 > java高并发加锁java哪个关键字可以对对象加互斥锁?介绍

java高并发加锁java哪个关键字可以对对象加互斥锁?介绍

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

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

首先,java中的synchronized可以为对象添加互斥。

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

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

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

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

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

java高并发加锁java中的锁都有哪些类型java中为什么要加锁


湖南自考之家 买乐惠

  • 关注微信关注微信

猜你喜欢

微信公众号