java中的锁

本文探讨了并发编程中的不同锁机制,包括公平锁(避免饿死,但效率高)、非公平锁(可能导致阻塞,但效率较低)、可重入锁(支持递归,避免死锁)、悲观锁(串行执行,效率低)和乐观锁(并发友好,可能冲突检查)。还区分了读锁和写锁的作用。
摘要由CSDN通过智能技术生成

公平锁和非公平锁

公平锁

如果存在多个线程加锁时,只会有一个线程在工作其他线程不工作,效率高,发生饿死现象

非公平锁

各个线程间同时工作会相互询问是否有其他线程,如果有其他线程,那么当前线程会排队等待,效率相对低

可重入锁(递归锁)

 可重入锁是某个线程已经获得某个锁,可以再次获取锁而不会出现死锁。再次获取锁的时候会判断当前线程是否是已经加锁的线程,如果是对锁的次数+1,释放锁的时候加了几次锁,就需要释放几次锁。(可以在加锁的代码块里面在加锁)

悲观锁和乐观锁

  1. 悲观锁:是指当执行任何操作时都要上锁其他操作都要进行等待。所有它相当于是串行执行,不支持并发,因此效率低
  2. 乐观锁:是指在执行一个操作时记录当前操作的版本号,当执行某个操作时除了执行相关读或者写后在进行更改版本号,这样其他操作与当前操作有冲突时会对比版本号是否一致,不一致则修改失败。

读锁和写锁

读锁:共享锁

写锁:排他锁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值