Java并发中互斥锁与读写锁区别

互斥锁
所谓互斥锁指的是一次最多只能有一个线程持有的锁,在jdk 1.5之前,我们通常使用synchronized机制控制多个线程对共享资源的访问。而现在,Lock提供了比synchronized机制更广泛的锁定操作,Lock和synchronized机制的主要区别:
  • synchronized机制提供了对每个对象相关的隐式监视器锁的访问,并强制所有锁的获取和释放均要出现在一个块结构中,当获取了多个锁时,他必须以相反的顺序释放。synchronized机制对锁的释放是隐式的,只要线程运行的代码块超出了synchronized语句块范围,锁就会被释放。而Lock机制必须显示的调用Lock的对象unlock()方法才能释放锁,这为获取锁和释放锁不出现在同一个块结构中、以及更自由的顺序释放锁提供了可能。
 
读写锁
ReentrantReadWriteLock中定义了2个内部类,ReentrantReadWriteLock.ReadLock和ReentrantReadWriteLock.WriteLock,分别用来代表读取锁和写入锁,ReentrantReadWriteLock对象提供了readLock()和writeLock()方法,用于获取读取锁和写入锁
 
其中:
  • 读取锁允许多个reader线程同时持有,而写入锁最多只能有一个writer线程持有。
  • 读写锁的使用场合是:读取数据的频率远大于修改共享数据的频率。在上述场合下使用读写锁控制共享资源的访问,可以提高并发性能。
  • 如果一个线程已经持有了写入锁,则可以再持有读写锁。相反,如果一个线程已经持有了读取锁,则在释放该读取锁之前,不能再持有写入锁。
  • 可以调用写入锁的newCondition()方法获取与该写入锁绑定的Condition对象,此时与普通的互斥锁并没有什么区别,但是调用读取锁的newCondition()方法将抛出异常。
 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值