monitor是一个同步工具,相当于操作系统中的互斥量,即值为1的信号量.
它内置于每一个object对象中,相当于许可证,拿到许可证即可以进行操作,没有拿到则需要进行阻塞等待.
synchronized又叫做内置锁,它是利用monitor来实现加锁解锁
我们来讲解一下syncrhoized加锁的同步块的执行过程:
现在假设有代码块: syncrhoized(Object lock){
同步代码...;
}
它在字节码文件中被编译为:monitorenter;//获取monitor许可证,进入同步块
同步代码...
monitorexit;//离开同步块后,释放monitor许可证