1.代码
synchronized(myObject) { -》类或者对象
//逻辑代码
}
2.底层原理
monitorenter
// 逻辑代码对应的指令
monitorexit
每个对象都有一个关联的monitor,比如一个对象实例就有一个monitor,一个类的Class对象也有一个monitor,如果要对这个对象加锁,那么必须获取这个对象关联的monitor的lock锁
他里面的原理和思路大概是这样的,monitor里面有一个计数器,从0开始的。如果一个线程要获取monitor的锁,就看看他的计数器是不是0,如果是0的话,那么说明没人获取锁,他就可以获取锁了,然后对计数器加1
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020012117284764.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTE0Mzk4Mzk=,size_16,color_FFFFFF,t_70)