Java锁机制之synchronized

本文详细介绍了Java中的synchronized锁机制,包括其作为可重入锁的特性,以及同步机制的实现原理,涉及到自旋锁的概念和作用。synchronized在Java中依赖JVM实现,可防止死锁,但也存在性能开销。线程获取和释放锁的过程涉及到Contention List、Entry List、Wait Set等组件,自旋锁则是在线程无法立即获取锁时的一种优化策略,以减少上下文切换的开销。
摘要由CSDN通过智能技术生成

java中2种锁的实现原理区别:

synchronized: 在软件层面依赖JVM,在jvm将class文件编译成字节码文件时添加monitorenter和monitorexit句柄来标识加锁的代码块
Lock: Lock书纯Java实现的,与底层的JVM无关。在java.util.concurrent.locks包中有很多Lock的实现类,常用的有ReentrantLock、ReadWriteLock(实现类ReentrantReadWriteLock),其实现都依赖java.util.concurrent.AbstractQueuedSynchronizer类(简称AQS)

synchronized机制:

首先需要明确的一点是:Java多线程的锁都是基于对象的,Java中的每一个非空对象都可以作为一个锁。

synchronized关键字锁具体表现为:锁对象和锁对象的class类;每个类可以有很多实例对象,不同实例对象的对象锁互不干扰,但每个类只有一个class对象,所有类只有一把公用锁。具体的代码表现为:

// 锁对象为对象实例(this)
public synchronized void method(){
   
	// todo
}

// 锁对象为对象对应的Class实例,因为Class数据存在于永久代,因此静态方法锁相当于该类的一个全局锁
public static synchronized void 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值