synchronized 的实现与Monitor监视器

Monitor是一个同步工具,相当于操作系统中的互斥量(mutex),即值为1的信号量。
它内置与每一个object对象中,相当于一个许可证。拿到许可证既可以进行操作,没有难道则需要阻塞等待。

synchronized 实现原理

synchronized 又叫做内置锁,为什么呢?因为使用synchronized加锁的同步代码块在字节码引擎中执行时,其实是通过锁对象的monitor的取用与释放来实现的。由上面我们知道Monitor是内置于任何一个对象中,synchronized利用monitor来实现加锁解锁的, 故synchronized又被称作内置锁。

1、现在我们知道为什么用synchronized(lock)来加锁的时候,锁对象可以是任意对象了

2、一个对象的monitor是唯一的,相当于一个唯一的许可证。拿到许可证的线程才可以执行,执行完释放对象的monitor才可以被其他线程获取。

我们来讲解一下syncrhoized加锁的同步块的执行过程:

现在假设有代码块:
syncrhoized(Object lock){

同步代码...;

}

它在字节码文件中被编译为:monitorenter;//获取monitor许可证,进入同步块
同步代码...
monitorexit;//离开同步块后,释放monitor许可证

原文地址:https://www.cnblogs.com/nineberg/p/13534521.html