synchornized实现原理
时间: 2023-10-23 12:45:13 浏览: 82
Java中synchronized实现原理详解
5星 · 资源好评率100%
Java 中的 `synchronized` 关键字可以用于实现多线程的同步,防止出现竞争条件(race condition)和响应过度(over-response)等问题。它的实现原理是通过对象监视器(monitor)实现的。
当一个线程执行到 `synchronized` 关键字时,它会尝试获取对象的监视器(monitor)。如果这个监视器被其他线程持有,则当前线程就会进入阻塞状态,等待其他线程释放这个监视器。如果当前线程成功获取到了这个监视器,那么它就会进入临界区(critical section),执行被 `synchronized` 关键字保护的代码。
当当前线程执行完临界区代码后,它会释放这个监视器,让其他等待该监视器的线程可以继续执行。
需要注意的是,每个对象都对应一个监视器,因此不同的对象之间的监视器是互相独立的,一个线程只能获取一个对象的监视器,不能同时获取多个对象的监视器。
另外,Java 中还提供了基于 Lock 接口的锁机制,它相比 `synchronized` 更加灵活,可以实现更复杂的锁定策略。但是,在性能方面,基于 Lock 的锁机制相对于 `synchronized` 来说更加消耗资源,因此在实际使用中需要根据具体情况进行选择。
阅读全文