在Java中,synchronized关键字用于实现线程的同步。当一个线程访问一个synchronized方法或代码块时,它会自动获取该方法或代码块的监视器(也称为monitor)。

Monitor是Java中的一种同步机制,用于实现线程的互斥和协调。每个对象都有一个monitor与之关联,用于控制对该对象的访问。当一个线程进入synchronized方法或代码块时,它会尝试获取该方法或代码块所属对象的monitor。如果monitor被其他线程持有,则当前线程会进入阻塞状态,直到monitor被释放。

Java中的synchronized锁主要有两种实现方式:偏向锁和重量级锁。

偏向锁是一种乐观锁,它假设竞争情况很少出现。当一个线程访问一个被synchronized修饰的方法或代码块时,它会尝试获取对象的偏向锁。如果对象的偏向锁没有被其他线程持有,则当前线程可以直接获取该锁,无需进入阻塞状态。这种情况下,线程可以连续多次获取锁,而不需要每次都进行加锁和解锁操作。偏向锁的目标是减少无竞争情况下的开销。

重量级锁是一种悲观锁,它假设竞争情况很常见。当多个线程同时竞争一个锁时,偏向锁会升级为重量级锁。重量级锁使用操作系统的互斥量(mutex)来实现线程的互斥。当一个线程获取到重量级锁后,其他线程需要等待该线程释放锁才能继续执行。重量级锁的实现比较复杂,涉及到操作系统的底层调用。

重量级锁的性能相对较低,因为它涉及到线程的上下文切换和操作系统的系统调用。因此,在设计多线程应用程序时,尽量减少对重量级锁的使用,避免出现竞争情况,以提高性能

Java中Synchronized的重量级锁是如何实现的?Monitor是干什么的?

原文地址: https://www.cveoy.top/t/topic/iISP 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录