美文网首页
【Java 多线程之ReadWriteLock 读写锁,偏向锁,

【Java 多线程之ReadWriteLock 读写锁,偏向锁,

作者: 热血趁年华 | 来源:发表于2018-08-03 10:42 被阅读0次

前言

ReadWriteLock是一个抽象类,实现类为ReentrantReadWriteLock,其管理两组锁,一个读锁,一个写锁。读锁可以在没有写锁的情况下被多个线程持有,写锁是独占的。读写锁更多应用在读多写少的情况下。

源码分析

ReentrantReadWriteLock有两个构造方法,默认的构造方法是不带参数,内部调用的是带布尔参的构造方法,参数为FALSE。构造内部生一个NonfairSync类,采用的是非公平模式。当为true的时候生成一个FairSync类,采用公平模式。

公平模式和非公平模式的区别

非公平模式:线程获取读锁和写锁的顺序不确定,采取竞争方式获取,吞吐量比较高

公平模式:线程会以队列有序的方式获取锁

公平模式和非公平模式继承了一个抽象类,该抽象类有两个比较重要的方法

读线程和写线程是否需要阻塞,在公平模式和非公平模式的选择上是不一样的。非公平模式下当线程获取写线程时候,不阻塞,获取读线程会判断是否有写锁,有的话会阻塞。在公平模式下,首先会判断线程队列中是否有等待的线程,如果有则放入队列中,则等待时间久的线程会获取锁。   

    在多线程中,要注意线程优化,经常使用的线程优化就是,偏向锁和旋转锁。

偏向锁:当某一个线程获得锁之后,该线程再次获取锁的时候,不需要执行相关的同步操作,就可直接获取锁。如果再次期间,其它的线程获取了这个锁,那么该锁就退出偏向模式。该情况不适合锁竞争比较激烈的情况。

JVM中使用 -XX:+UseBiasedLocking

自旋锁:在多线程中线程的上下文切换会消耗计算机的资源影响其性能,自旋锁可以减少这种上下文切换的时间,当一个线程获取锁没有成功时,会自转几个CPU周期,直到该线程获取这个锁。

在JDK1.6中,Java虚拟机提供-XX:+UseSpinning参数来开启自旋锁,使用-XX:PreBlockSpin参数来设置自旋锁等待的次数

相关文章

  • 【Java 多线程之ReadWriteLock 读写锁,偏向锁,

    前言 ReadWriteLock是一个抽象类,实现类为ReentrantReadWriteLock,其管理两组锁,...

  • ReadWriteLock读写锁

    1、引入ReadWriteLock读写锁 ReadWriteLock是JDK5中提供的读写分离锁。读写分离锁可以有...

  • 读写锁

    今天来说说Java 的读写锁-ReadWriteLock,ReadWriteLock是一个接口,实现类是Reent...

  • 读写锁实现

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

  • java初入多线程9

    ReadWriteLock 多写锁 ReadWriteLock 是JDK5中提供的读写分离锁,读写分离可以有效的帮...

  • 基于CAS的一些锁(5)- ReadWriteLock

    ReadWriteLock 读写锁。读写锁的概念其实就是共享锁和排他锁,读锁就是共享锁,写锁就是排他锁。 如何理解...

  • 17.读写锁ReentrantWriteReadLock

    读写锁ReentrantWriteReadLock,基于AQS的锁机制,实现ReadWriteLock接口。内部有...

  • Java中对锁的理解

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

  • ReadWriteLock

    ReadWriteLock 从这一节开始介绍锁里面的最后一个工具:读写锁(ReadWriteLock)。 Reen...

  • Java锁的种类

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

网友评论

      本文标题:【Java 多线程之ReadWriteLock 读写锁,偏向锁,

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