比如说我一个对象被加了synchronized锁,然后我另外一个线程来访问了,它这个线程怎么判断对象被不被锁住呢?
线程在遇到同步请求时,会执行 monitorenter 字节码指令,
JVM 根据对象头的 mark word 尝试“抢”这把锁;
如果失败,线程就会自动排队、挂起,直到锁可用时再被唤醒并重试获取。
在执行monitorenter时,会尝试获取对象的锁,如果锁的计数器为 0 则表示锁可以被获取,获取后将锁计数器设为 1 也就是加 1。
线程在遇到同步请求时,会执行 monitorenter 字节码指令,
JVM 根据对象头的 mark word 尝试“抢”这把锁;
如果失败,线程就会自动排队、挂起,直到锁可用时再被唤醒并重试获取。
在执行monitorenter时,会尝试获取对象的锁,如果锁的计数器为 0 则表示锁可以被获取,获取后将锁计数器设为 1 也就是加 1。