synchronized关键字的底层原理?
synchronized是Java中用于实现同步的关键字,每个对象内部都有一个锁(也称为监视器锁或互斥锁), 而synchronized就是一种用来获取或释放这个锁的机制。
他的底层是由monitor实现的,每一个锁对象都会有一个关联的monitor对象,monitor是jvm级别的对象,由c++实现,线程获取锁需要使用对象锁关联monitor。
在monitor内部有3个属性,分别是owner,entrylist,waitset。
其中owner是关联的获得锁的线程,并且只能关联一个线程;entrylist关联的是处于阻塞状态的线程(没抢到锁的线程);waitset关联的是处于Waiting状态的线程(调用了wait方法的线程)。