美文网首页
锁的高级深化(重入锁、读写锁)

锁的高级深化(重入锁、读写锁)

作者: WinnXUDONG | 来源:发表于2018-03-20 09:37 被阅读0次

在多线程中,我们知道可以使用synchronized关键字来实现线程间的同步互斥工作,那么其实还有一个更优秀的机制去完成这个“同步互斥”工作,他就是Lock对象,我们主要学习两种锁,重入锁和读写锁。他们具有比synchronized更为强大的功能,并且有嗅探探锁定、多路分支等功能。

ReentrantLock(重入锁)

重入锁,在需要进行同步的代码部分加上锁定,但不要忘记最后一定要释放锁定,不然会造成锁永远无法释放,其他线程永远进不来的结果。(github)

锁与等待/通知

在使用synchronized的时候,如果需要多线程间进行协作工作则需要Object的wait()和notity()、notityAll()方法进行配合工作。

那么同样,我们在使用Lock的时候,可以使用一个新的等待/通知的类,他就是Condition。这个Condition一定是针对具体的某一把锁。也就是在只有锁的基础之上才会产生Condition。 (github)

多Condition我们可以通过一个Lock对象产生多个Condition进行多线程间的交互,非常的灵活。可以使得部分需要唤醒的线程唤醒,其他线程则继续等待通知。 (github)

ReentrantReadWriteLock(读写锁)

对写锁ReentrantReadWriteLock,其核心就是实现读写分离的锁。在高并发访问下,尤其是读多写少的情况下,性能要远高于重入锁。
之前学synchronized、ReentrantLock时,我们知道,同一时间内,只能有一个线程进行访问被锁定的代码,那么读写锁则不同,其本质是分成两个锁,即读锁、写锁。在读锁下,多线程可以并发的进行访问,但是在写锁的时候只能一个一个的顺序访问。

口诀:读读共享,写写互斥,读写互斥。
(github)

Lock/Condition其他方法和用法

公平锁和非公平锁:

公平锁:表示哪个线程先执行就哪个先获得锁
非公平锁:按CPU(无序的)来分配锁
非公平锁效率高于公平锁,因为公平锁需要浪费一些性能去维护顺序。

Lock lock = new ReentrantLock(boolean isFair);

lock用法:
tryLock():尝试获得锁,获得结果用true/false返回。
tryLock():在给定的时间内尝试获得锁,获得结果用true/false返回。
isFair():是否是公平锁。
isLocked():是否锁定。
getHoldCount():查询当前线程保持此锁的个数,也就是调用lock()次数。
lockInterruptibly():有限响应中断的锁。getQueueLength():返回正在等待获取此锁的线程数。
getWaitQueueLength():返回等待与锁定相关的给定条件Condition线程数。
hasQueuedThread(Thread thread):查询指定的线程是否在等待此锁。
hasQueuedThreads():查询是否有线程在等待此锁。
hasWaiters():查询是否有线程正在等待与此锁有关的Condition条件。

相关文章

  • 锁的高级深化(重入锁、读写锁)

    锁 在多线程中,我们知道可以使用synchronized关键字来实现线程间的同步互斥工作,那么其实还有一个更优秀的...

  • 读写锁实现

    读写锁 ReentrantReadWriteLock可重入读写锁(实现ReadWriteLock接口) 使用:Re...

  • Java中对锁的理解

    Java中锁的种类划分 公平锁/非公平锁 可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁/悲观锁 分段锁 偏向锁...

  • 2019-04-15——Java并发包 锁

    锁的分类 公平锁/非公平锁 可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁/悲观锁 分段锁 偏向锁/轻量级锁/重...

  • java锁的种类

    锁大概有以下名词:自旋锁,自旋锁的其他种类,阻塞锁,可重入锁,读写锁,互斥锁,悲观锁,乐观锁,公平锁,偏向锁,对象...

  • Java中的锁

    公平锁/非公平锁 可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁/悲观锁 分段锁 偏向锁/轻量级锁/重量级锁 自...

  • Java 锁相关

    公平锁/非公平锁 可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁/悲观锁 分段锁 偏向锁/轻量级锁/重量级锁 自...

  • java中的锁分类

    公平锁/非公平锁 可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁/悲观锁 分段锁 偏向锁/轻量级锁/重量级锁 自...

  • 锁小结

    JAVA中锁的分类 公平锁/非公平锁可重入锁独享锁/共享锁互斥锁/读写锁乐观锁/悲观锁分段锁偏向锁/轻量级锁/重量...

  • Java锁的种类

    JAVA锁有哪些种类,以及区别(转) 公平锁/非公平锁可重入锁独享锁/共享锁互斥锁/读写锁乐观锁/悲观锁分段锁偏向...

网友评论

      本文标题:锁的高级深化(重入锁、读写锁)

      本文链接:https://www.haomeiwen.com/subject/iqbfqftx.html