java投票锁_java 锁

3037937d8df4403fcfa048bd66c80358.png

1、实现原理:synchronized可以保证方法或者代码块在运行的时候,同一时刻只有一个线程可以执行这段代码(通过对象的对象头里的monitor实现),同时还保证其 共享变量的内存可见性(当对象获取到锁时,首先使其高速缓存失效,直接从内存中读取变量信息,然后当对象释放锁之前,强制刷新高速缓存,将更新的值同步到内存中去,下一个获取对象锁的线程也同样操作,即可实现其共享变量的内存可见性)

java中每个对象都可以作为锁,这个是synchronized实现同步的基础

2、缺点:无法中断锁,无法投票获得锁

二、volatile关键字

只保证了共享变量的内存可见性,不保证其原子性(修改变量之后写入内存,将其他用到此变量的缓存值置为失效)

三、volatile与synchronized区别

1、volatile本质是告诉jvm当前变量在工作内存中的值是不确定的,需要去主存中读取,而synchronized则是锁定当前变量,只有当前线程可以访问此变量,其他线程均无法访问

2、volatile可用在变量级别,而synchronized可以用在变量、方法、代码块上

3、volatile只实现了当前变量的修改可见性,而synchronized则实现了原子性+可见性

4、volatile不会造成线程阻塞,而synchronized会造成线程阻塞

四、Reentrantlock类

Reentrantlock比synchronized多了一些功能,如中断锁、定时锁等功能,方便在对象竞争激烈的情况下更好的执行任务

五、Reentrantlock与synchronized区别

1、Reentrantlock是类底层调用unsafe的park方法上锁,而synchronized是关键字,底层是采用对象的对象头信息上锁

2、synchronized会自动释放锁,而Reentrantlock不会,调用多少次就需要手动释放多少次锁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值