返回顶部
首页 > 资讯 > 精选 >java读写锁怎么使用及优点是什么
  • 743
分享到

java读写锁怎么使用及优点是什么

2023-06-30 12:06:02 743人浏览 独家记忆
摘要

这篇文章主要介绍了java读写锁怎么使用及优点是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇java读写锁怎么使用及优点是什么文章都会有所收获,下面我们一起来看看吧。前言:读写锁(Readers-Writ

这篇文章主要介绍了java读写怎么使用及优点是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇java读写锁怎么使用及优点是什么文章都会有所收获,下面我们一起来看看吧。

前言:

读写锁(Readers-Writer Lock)顾名思义是一把锁分为两部分:读锁和写锁,其中读锁允许多个线程同时获得,因为读操作本身是线程安全的,而写锁则是互斥锁,不允许多个线程同时获得写锁,并且写操作和读操作也是互斥的。总结来说,读写锁的特点是:读读不互斥、读写互斥、写写互斥

1.读写锁使用

在 Java 语言中,读写锁是使用 ReentrantReadWriteLock 类来实现的,其中:

  • ReentrantReadWriteLock.ReadLock表示读锁,它提供了 lock 方法进行加锁、unlock 方法进行解锁。

  • ReentrantReadWriteLock.WriteLock表示写锁,它提供了 lock 方法进行加锁、unlock 方法进行解锁。

它的基础使用如下代码所示:

// 创建读写锁final ReentrantReadWriteLock readWriteLock = new ReentrantReadWriteLock();// 获得读锁final ReentrantReadWriteLock.ReadLock readLock = readWriteLock.readLock();// 获得写锁final ReentrantReadWriteLock.WriteLock writeLock = readWriteLock.writeLock();// 读锁使用readLock.lock();try {    // 业务代码...} finally {    readLock.unlock();}// 写锁使用writeLock.lock();try {    // 业务代码...} finally {    writeLock.unlock();}

1.1 读读不互斥

多个线程可以同时获取到读锁,称之为读读不互斥,如下代码所示:

// 创建读写锁final ReentrantReadWriteLock readWriteLock = new ReentrantReadWriteLock();// 创建读锁final ReentrantReadWriteLock.ReadLock readLock = readWriteLock.readLock();Thread t1 = new Thread(() -> {    readLock.lock();    try {        System.out.println("[t1]得到读锁.");        Thread.sleep(3000);    } catch (InterruptedException e) {        e.printStackTrace();    } finally {        System.out.println("[t1]释放读锁.");        readLock.unlock();    }});t1.start();Thread t2 = new Thread(() -> {    readLock.lock();    try {        System.out.println("[t2]得到读锁.");        Thread.sleep(3000);    } catch (InterruptedException e) {        e.printStackTrace();    } finally {        System.out.println("[t2]释放读锁.");        readLock.unlock();    }});t2.start();

以上程序执行结果如下: 

java读写锁怎么使用及优点是什么

1.2 读写互斥

读锁和写锁同时使用是互斥的(也就是不能同时获得),这称之为读写互斥,如下代码所示:

// 创建读写锁final ReentrantReadWriteLock readWriteLock = new ReentrantReadWriteLock();// 创建读锁final ReentrantReadWriteLock.ReadLock readLock = readWriteLock.readLock();// 创建写锁final ReentrantReadWriteLock.WriteLock writeLock = readWriteLock.writeLock();// 使用读锁Thread t1 = new Thread(() -> {    readLock.lock();    try {        System.out.println("[t1]得到读锁.");        Thread.sleep(3000);    } catch (InterruptedException e) {        e.printStackTrace();    } finally {        System.out.println("[t1]释放读锁.");        readLock.unlock();    }});t1.start();// 使用写锁Thread t2 = new Thread(() -> {    writeLock.lock();    try {        System.out.println("[t2]得到写锁.");        Thread.sleep(3000);    } catch (InterruptedException e) {        e.printStackTrace();    } finally {        System.out.println("[t2]释放写锁.");        writeLock.unlock();    }});t2.start();

以上程序执行结果如下: 

java读写锁怎么使用及优点是什么

1.3 写写互斥

多个线程同时使用写锁也是互斥的,这称之为写写互斥,如下代码所示:

// 创建读写锁final ReentrantReadWriteLock readWriteLock = new ReentrantReadWriteLock();// 创建写锁final ReentrantReadWriteLock.WriteLock writeLock = readWriteLock.writeLock();Thread t1 = new Thread(() -> {    writeLock.lock();    try {        System.out.println("[t1]得到写锁.");        Thread.sleep(3000);    } catch (InterruptedException e) {        e.printStackTrace();    } finally {        System.out.println("[t1]释放写锁.");        writeLock.unlock();    }});t1.start();Thread t2 = new Thread(() -> {    writeLock.lock();    try {        System.out.println("[t2]得到写锁.");        Thread.sleep(3000);    } catch (InterruptedException e) {        e.printStackTrace();    } finally {        System.out.println("[t2]释放写锁.");        writeLock.unlock();    }});t2.start();

以上程序执行结果如下: 

java读写锁怎么使用及优点是什么

2.优点分析

  • 提高了程序执行性能:多个读锁可以同时执行,相比于普通锁在任何情况下都要排队执行来说,读写锁提高了程序的执行性能。

  • 避免读到临时数据:读锁和写锁是互斥排队执行的,这样可以保证了读取操作不会读到写了一半的临时数据。

3.适用场景

读写锁适合多读少写的业务场景,此时读写锁的优势最大。

关于“java读写锁怎么使用及优点是什么”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“java读写锁怎么使用及优点是什么”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网精选频道。

--结束END--

本文标题: java读写锁怎么使用及优点是什么

本文链接: https://lsjlt.com/news/328795.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • java读写锁怎么使用及优点是什么
    这篇文章主要介绍了java读写锁怎么使用及优点是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇java读写锁怎么使用及优点是什么文章都会有所收获,下面我们一起来看看吧。前言:读写锁(Readers-Writ...
    99+
    2023-06-30
  • java 读写锁的使用及它的优点
    目录1.读写锁使用1.1 读读不互斥1.2 读写互斥1.3 写写互斥2.优点分析3.适用场景总结前言: 读写锁(Readers-Writer Lock)顾名思义是一把锁分为两部分:读...
    99+
    2024-04-02
  • java读写锁的使用方法是什么
    在Java中,读写锁是一种特殊的锁,允许多个线程同时读取共享资源,但只允许一个线程进行写操作。读写锁通过ReadWriteLock接...
    99+
    2024-04-03
    java
  • Java读写锁ReentrantReadWriteLock怎么使用
    这篇文章主要介绍“Java读写锁ReentrantReadWriteLock怎么使用”,在日常操作中,相信很多人在Java读写锁ReentrantReadWriteLock怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法...
    99+
    2023-06-02
  • Java 重入锁和读写锁怎么使用
    这篇文章主要介绍“Java 重入锁和读写锁怎么使用”,在日常操作中,相信很多人在Java 重入锁和读写锁怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java 重入锁和读写锁怎么使用”的疑惑有所帮助!...
    99+
    2023-06-08
  • Java实现读写锁的原理是什么
    本文小编为大家详细介绍“Java实现读写锁的原理是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java实现读写锁的原理是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。读/写锁Java实现首先我们总结一...
    99+
    2023-06-29
  • java读写锁的工作原理是什么
    读写锁是一种特殊的锁机制,允许多个线程同时读取共享资源,但只允许一个线程写入共享资源。读写锁的工作原理如下: 当一个线程想要读取...
    99+
    2024-04-03
    java
  • C++的std::shared_mutex读写锁怎么使用
    这篇“C++的std::shared_mutex读写锁怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++的std:...
    99+
    2023-06-29
  • maven优缺点及使用方法是什么
    本篇内容主要讲解“maven优缺点及使用方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“maven优缺点及使用方法是什么”吧!1.什么是maven:maven是Java平台下的一款项目构...
    99+
    2023-07-05
  • 关于读写锁算法的Java实现及思考是怎么样的
    本篇文章给大家分享的是有关关于读写锁算法的Java实现及思考是怎么样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。问题背景:多个线程对一个共享的资源进行读写访问。写线程之间需...
    99+
    2023-06-17
  • Java NIO是什么及怎么使用
    Java NIO(New IO)是Java 1.4版本中引入的一种用于替代传统Java IO的新的输入输出API。NIO提供了更高效...
    99+
    2023-09-27
    Java
  • Java文件的简单读写、随机读写、NIO读写与怎么使用MappedByteBuffer读写
    这篇文章主要介绍“Java文件的简单读写、随机读写、NIO读写与怎么使用MappedByteBuffer读写”,在日常操作中,相信很多人在Java文件的简单读写、随机读写、NIO读写与怎么使用MappedByteBuffer读写问题上存在疑...
    99+
    2023-06-15
  • mysql悲观锁的优缺点是什么
    悲观锁是一种在数据操作前先获取锁,以防止其他事务对数据进行修改的方式。它的优缺点如下: 优点: 可以有效防止并发问题:悲观锁在操作...
    99+
    2024-05-08
    mysql
  • 什么是Typescript以及其优缺点是什么
    什么是Typescript以及其优缺点是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。JavaScript可能是现代网络的事实上的语言,但长期以来,它也是我选择脚本编写的语...
    99+
    2023-06-16
  • Redis分布式锁的优缺点是什么
    Redis分布式锁的优点包括: 高性能:Redis作为内存数据库,具有高性能的特点,能够快速地处理锁的请求。 可靠性:Red...
    99+
    2024-05-07
    Redis
  • java读写文件的步骤是什么
    Java读写文件的步骤如下:读取文件:1. 创建一个输入流对象,例如使用`FileInputStream`或`BufferedRea...
    99+
    2023-08-29
    java
  • ajax原理及其优点是什么
    本篇文章给大家分享的是有关ajax原理及其优点是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 在工作中用了...
    99+
    2024-04-02
  • Java读写锁ReadWriteLock的创建使用及测试分析示例详解
    目录简介基本方法介绍创建读写锁使用读锁readLock().lock()使用读锁readLock().tryLock();readLock().tryLock(6L, TimeUni...
    99+
    2023-01-12
    Java读写锁ReadWriteLock Java ReadWriteLock
  • java中怎么使用io流读写文件
    在Java中,可以使用IO流来读写文件。下面是一些常见的示例:1. 使用FileInputStream和FileOutputStre...
    99+
    2023-08-26
    java
  • Java锁怎么使用
    这篇文章主要介绍了Java锁怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java锁怎么使用文章都会有所收获,下面我们一起来看看吧。乐观锁和悲观锁悲观锁悲观锁对应于生活中悲观的人,悲观的人总是想着事情往...
    99+
    2023-07-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作