说说synchronized的实现原理
时间: 2023-12-07 08:06:13 浏览: 131
synchronized关键字是Java中用于实现线程同步的机制。它可以用于代码块和方法上,通过获取对象的监视器锁来实现线程的互斥访问。
在代码块中,synchronized使用monitorenter和monitorexit指令来实现锁的获取和释放。当一个线程进入synchronized代码块时,它会尝试获取对象的监视器锁(也称为内部锁)。如果锁已经被其他线程持有,线程将被阻塞,直到锁被释放。
在方法上,synchronized关键字被用于修饰整个方法。当一个线程调用synchronized方法时,它会自动获取该方法所属对象的监视器锁。如果其他线程已经持有了该锁,调用线程将被阻塞,直到锁被释放。方法上的synchronized锁的存储位置取决于底层的实现方式和JVM的具体实现。
synchronized被称为重量级锁的原因是因为它依赖于操作系统的Mutex Lock来实现线程之间的互斥访问。Mutex Lock的实现需要进行用户态和核心态之间的状态转换,这个过程的成本较高,导致synchronized的效率相对较低。因此,synchronized被认为是一种重量级锁。
总结来说,synchronized的实现原理是通过获取对象的监视器锁来实现线程的互斥访问,它可以用于代码块和方法上。在底层实现中,它依赖于操作系统的Mutex Lock,因此被称为重量级锁。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [synchronized 实现原理](https://blog.csdn.net/weixin_45525272/article/details/126380932)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
阅读全文