synzhronized原理3

本文深入探讨了Java中对象锁的概念及其实现机制,包括synchronized关键字的使用方式及其背后的JVM实现原理。文章还介绍了互斥与合作两种线程同步方式,并详细分析了方法级与代码块级同步的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、java中的每个对象都可作为锁,有三种表现形式:

   对于普通方法,锁的是当前this对象。

   对于静态方法,锁的是class对象

   对于方法块,锁的是synchronized指定的对象。

2、JVM基于Monitor对象来实现昂发的同步和代码块同步,但是实现细节不一样。代码块同步是使用monitorenter和monitorexit指令实现,而方法同步使用的是另外一种方式实现的。

3、Java's monitor supports two kinds of thread synchronization: mutual exclusion and cooperation

4、synchronized锁不一定是FIFO的。

it might make sense to have ten FIFO queues, one for each priority a thread can have inside the Java virtual machine. The virtual machine could then choose the thread that has been waiting the longest in the highest priority queue that contains any waiting threads. 、

5、每个对象和每个Class对象都有与其对应的监视器对象

In the Java virtual machine, every object and class is logically associated with a monitor. For objects, the associated monitor protects the object's instance variables. For classes, the monitor protects the class's class variables. If an object has no instance variables, or a class has no class variables, the associated monitor protects no data.

6、抛异常的时候锁会自动退出

7、方法块和方法锁的字节码区别见http://www.artima.com/insidejvm/ed2/threadsynchP.html

    方法块有monitorenter和monitorexit指令

    方法没有

1、If you compare these bytecodes with the ones shown earlier for KitchenSync's reverseOrder() method, you will see that these bytecodes are in effect those of KitchenSync with the support for entering and exiting the monitor removed. 2、Instructions at offset 0 through 56 of HeatSync's bytecodes correspond to instructions at offset 4 through 68 of KitchenSync's bytecodes. Because HeatSync's reverseOrder() method doesn't need a local variable slot to store the reference to the locked object, the local variable positions used by each method are different. The function of the instructions themselves, however, match up exactly.

3、Another difference between the two reverseOrder() methods is that the compiler doesn't create an exception table for HeatSync's reverseOrder() method. In HeatSync's case, an exception table isn't necessary. When this method is invoked, the Java virtual machine automatically acquires the lock on the this object. If this method completes abruptly, just as if it completes normally, the virtual machine will release the lock on the this object automatically.

8、

转载于:https://www.cnblogs.com/YDDMAX/p/5652144.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值