并发编程-synchronized-互斥锁

本文详细解析了Java中互斥锁(synchronized)的工作原理,包括其如何保证线程安全,锁的分类(偏向锁、轻量级锁、重量级锁),以及锁的使用规则和建议。探讨了锁与资源的关系,如何通过细粒度锁提升并发性能。

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

synchronized:互斥锁

什么是互斥锁?

保证同一时刻只有一个线程执行。

互斥锁用来做什么?

并发编程中原子性的产生来源于线程切换,互斥锁用来保证原子性。

互斥锁使用的的规则?

锁如果修饰静态方法时,锁的是当前CLASS对象。
修饰非静态方法时,锁的是当前实例对象this。
修饰代码块,本质锁对象
使用范例如下:

     class a{
       synchronized(a.class) static void x{
       
       }
       synchronized void x{

 }
	object obj=new object();
	void x{
		 synchronized(obj){
		 }
	}
	
       }

锁的使用范围建议?

结合码出高效中的建议是使用锁的范围要尽可能小

加锁的本质是什么?

monitor:对象的隐藏属性
Java虚拟机所属对象的monitor经行加锁判断。

锁的分类?

synchronized分为偏向锁-轻量级锁–重量级锁三类锁
偏向锁:资源没有被多线程竞争情况下减少带来的性能开销
轻量级锁:当出现锁的竞争会升级为轻量级锁
重量级锁:当锁的竞争很激烈会升级为重量级锁

资源与锁的关系?

锁的设计主要是为了保护资源,从资源角度之间看待问题,资源与资源分为有关系和没关系,当资源与资源之间没有关系,那就可以给每一个资源加上锁,保持资源和锁的独立性,也可以用一把锁保护多个资源,这样就会所有的资源变成串行操作,所以适当的对资源进行精细化管理,能够提升性能,这种锁被称为细粒度锁,当资源与资源有关系时,琐的设计需要考虑具体情况和并发,较为复杂,具体情况具体分析。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值