synchronized-粗略过程

Posted linsenli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了synchronized-粗略过程相关的知识,希望对你有一定的参考价值。

JVM书400页中介绍到在HotSpot虚拟机,每个对象的对象头信息中的“Mark Word”含有锁标志位。当对象被synchronized修饰时标志位为10即重量级锁。

 

在具体的过程中,每个对象都对应一个ObjectMonitor,获得锁即获得ObjectMonitor对象。(一切皆对象)

ObjectMonitor中有两个队列,_WaitSet 和 _EntryList,还有指向持有ObjectMonitor对象的线程的对象_owner。

当多个线程同时访问一段同步代码时,线程会被封装成ObjectWaiter对象,并进入 _EntryList 集合。

当线程获取到对象的 monitor 后进入 _Owner 区域并把monitor中的owner变量设置为当前线程,同时monitor中的计数器count加1。

若线程调用 wait() 方法,将释放当前持有的monitor,owner变量恢复为null,count自减1,同时该线程进入  _WaitSet 集合中等待被唤醒。

若当前线程执行完毕也将释放monitor(锁)并复位变量的值,以便其他线程进入获取monitor(锁)。

 

参考:https://blog.csdn.net/javazejian/article/details/72828483

以上是关于synchronized-粗略过程的主要内容,如果未能解决你的问题,请参考以下文章

java学习:对synchronized的测试

Synchronize执行过程

Synchronized锁升级过程 学习笔记

synchronized

synchronized

关于synchronized的介绍