- 浏览: 494466 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (502)
- Java (70)
- Linux (10)
- 数据库 (38)
- 网络 (10)
- WEB (13)
- JSP (4)
- 互联网 (71)
- JavaScript (30)
- Spring MVC (19)
- HTML (13)
- CSS (3)
- AngularJS (18)
- Redis (5)
- Bootstrap CSS (1)
- ZooKeeper (4)
- kafka (6)
- 服务器缓存 (4)
- Storm (1)
- MongoDB (9)
- Spring boot (16)
- log4j (2)
- maven (3)
- nginx (5)
- Tomcat (2)
- Eclipse (4)
- Swagger (2)
- Netty (5)
- Dubbo (1)
- Docker (7)
- Hadoop (12)
- OAuth (1)
- webSocket (4)
- 服务器性能 (7)
- Session共享 (1)
- tieye修改 (1)
- 工作 (1)
- 有用的语录 (0)
- https (2)
- common (5)
- 产品开发管理 (1)
- CDN 工作原理 (1)
- APNS、GCM (1)
- 架构图 (3)
- 功能实现分析 (1)
- JMX (1)
- 服务器相关操作命令 (1)
- img02 (0)
- 服务器环境搭建 (9)
- goodMenuBook (1)
- CEInstantPot (0)
- 有用数据 (1)
- 百度地图WEB API (2)
- 正则表达式 (1)
- 样式例子 (2)
- staticRecipePressureCooker.zip (1)
- jCanvas (1)
- 网站攻击方法原理 (1)
- 架构设计 (3)
- 物联网相关 (3)
- 研发管理 (7)
- 技术需求点 (1)
- 计划 (1)
- spring cloud (11)
- 服务器开发的一些实用工具和方法 (1)
- 每天学到的技术点 (4)
- Guava (1)
- ERP 技术注意要点 (2)
- 微信小程序 (1)
- FineRepor (1)
- 收藏夹 (1)
- temp (5)
- 服务架构 (4)
- 任职资格方案 (0)
- osno_test (1)
- jquery相关 (3)
- mybatis (4)
- ueditor (1)
- VueJS (7)
- python (10)
- Spring EL (1)
- shiro (1)
- 前端开发原理与使用 (7)
- YARN (1)
- Spark (1)
- Hbase (2)
- Pig (2)
- 机器学习 (30)
- matplotlib (1)
- OpenCV (17)
- Hystrix (1)
- 公司 (1)
- miniui (4)
- 前端功能实现 (3)
- 前端插件 (1)
- 钉钉开发 (2)
- Jenkins (1)
- elasticSearch使用 (2)
- 技术规范 (4)
- 技术实现原理 (0)
最新评论
Java 读写锁ReadWriteLock
读写锁相对于线程互斥的优势在于高效,它不会对两个读线程进行盲目的互斥处理,当读线程数量多于写线程尤其如此,当全是写线程时两者等效。(多用于读多写少时使用)
1.读锁可以允许多个进行读操作的线程同时进入,但不允许写进程进入。
2.写锁只允许一个写进程进入,在这期间任何进程都不能再进入。
注意:每个读写锁都有挂锁和解锁,最好将每一对挂锁和解锁操作都用try、finally来套入中间的代码,这样就会防止因异常的发生而造成死锁得情况。
例子:
参考(ReentrantReadWriteLock类和ReentrantLock类的区别):http://blog.csdn.net/kai_wei_zhang/article/details/8197061
读写锁相对于线程互斥的优势在于高效,它不会对两个读线程进行盲目的互斥处理,当读线程数量多于写线程尤其如此,当全是写线程时两者等效。(多用于读多写少时使用)
1.读锁可以允许多个进行读操作的线程同时进入,但不允许写进程进入。
2.写锁只允许一个写进程进入,在这期间任何进程都不能再进入。
注意:每个读写锁都有挂锁和解锁,最好将每一对挂锁和解锁操作都用try、finally来套入中间的代码,这样就会防止因异常的发生而造成死锁得情况。
例子:
import java.util.Random; import java.util.concurrent.locks.*; public class ReadWriteLockTest { public static void main(String[] args) { final TheData myData = new TheData(); // 这是各线程的共享数据 for (int i = 0; i < 3; i++) { // 开启3个读线程 new Thread(new Runnable() { @Override public void run() { while (true) { myData.get(); } } }).start(); } for (int i = 0; i < 3; i++) { // 开启3个写线程 new Thread(new Runnable() { @Override public void run() { while (true) { myData.put(new Random().nextInt(10000)); } } }).start(); } } } class TheData { private Object data = null; private ReadWriteLock rwl = new ReentrantReadWriteLock(); public void get() { rwl.readLock().lock(); // 读锁开启,读线程均可进入 try { // 用try finally来防止因异常而造成的死锁 System.out.println(Thread.currentThread().getName() + "is ready to read"); Thread.sleep(new Random().nextInt(100)); System.out.println(Thread.currentThread().getName() + "have read date" + data); } catch (InterruptedException e) { e.printStackTrace(); } finally { rwl.readLock().unlock(); // 读锁解锁 } } public void put(Object data) { rwl.writeLock().lock(); // 写锁开启,这时只有一个写线程进入 try { System.out.println(Thread.currentThread().getName() + "is ready to write"); Thread.sleep(new Random().nextInt(100)); this.data = data; System.out.println(Thread.currentThread().getName() + "have write date" + data); } catch (InterruptedException e) { e.printStackTrace(); } finally { rwl.writeLock().unlock(); // 写锁解锁 } } }
参考(ReentrantReadWriteLock类和ReentrantLock类的区别):http://blog.csdn.net/kai_wei_zhang/article/details/8197061
发表评论
-
elasticSearch使用
2022-04-27 08:42 411ElasticSearch 基于Apache Lucene构建 ... -
IDEA 快捷键
2022-03-02 16:55 242大小写转换快捷键 ctr+shift+u IDEA ... -
每天学到的技术点3
2022-02-21 20:01 2451.TEXT与BLOB的区别,二者 ... -
zookeeper dubbo 安装
2021-12-04 19:27 310docker-machine ssh default d ... -
JVM 调优与测试
2021-05-22 22:24 580VisualVM 能够监控线程,内存情况,查看方法的CPU ... -
百度人脸识别
2021-05-21 16:11 360package com.gaojinsoft.htwy.y20 ... -
springboot tomcat 参数配置与数据库连接池多少的性能分析
2021-05-12 22:15 557参数配置与数据库连接池多少的性能分析 tomcat线程数 ... -
log4j2应用
2020-07-23 14:16 362https://blog.csdn.net/giventian ... -
文件上传下载
2020-07-06 13:16 4171.文件ID,名字(源,目标),大小,路径(/aa/bb/s. ... -
base64与file 相互转换
2019-10-23 18:19 763base64与file 相互转换 import org. ... -
百度身份证识别
2019-10-18 18:19 660package com.gaojinsoft.htwy.y20 ... -
JAVA 实用方法
2019-05-16 09:50 350//得到xml文件中的sql文本 public St ... -
导出内容到excel文件方法
2019-05-15 10:52 507@SuppressWarnings("rawtype ... -
要求fsss
2019-09-21 21:30 299/* */ package com.midea.com ... -
反射、类信息、动态代理、CGLIB动态代理原理与测试
2019-01-29 21:04 482package com.midea.common.classT ... -
JVM 监控工具
2019-01-21 18:04 381JVM 监控工具 //========== ... -
java 线程池线程复用原理
2019-01-15 17:10 1158java 线程池线程复用原理 其实就一个大run()把其 ... -
LockSupport原理
2019-01-11 18:01 698LockSupport原理 在Java语言中,每一个对象有 ... -
runnable与thread 区别
2019-01-11 14:49 679runnable与thread 区别 在java中可有两种 ... -
Java的Future模式
2019-01-11 10:08 440Java的Future模式 runnable与thread ...
相关推荐
下面我们将详细探讨Java读写锁的概念、实现原理以及如何在实际代码中应用。 1. **读写锁概念**: - 读写锁分为读锁(共享锁)和写锁(独占锁)。读锁允许多个线程同时读取数据,而写锁只允许一个线程进行写操作。 ...
Java的多线程编程中,读写锁(ReadWriteLock)是一种高效的并发控制机制,它将锁的权限进行了区分,允许多个线程同时读取资源,但仅允许一个线程进行写入操作。这种设计模式提高了数据共享的效率,因为读操作通常...
在Java中,`java.util.concurrent.locks`包下的`ReadWriteLock`接口提供了读写锁的抽象定义,具体实现由`ReentrantReadWriteLock`类提供。`ReentrantReadWriteLock`实现了`ReadWriteLock`接口,提供了`readLock()`和...
在Java中,读写锁是通过ReadWriteLock接口实现的,该接口提供了readLock和writeLock两种锁的操作机制,一个资源可以被多个线程同时读,或者被一个线程写,但是不能同时存在读和写线程。 读写锁的基本规则是: * 读...
- **读写锁**: 除了ReentrantLock,Java还提供了ReadWriteLock接口,它包含两个Lock对象:一个用于读操作(ReadLock),允许多个线程同时读取共享资源;另一个用于写操作(WriteLock),一次只允许一个线程写入。...
《Java并发编程学习宝典(漫画版)》中提到的23章主要讲解了Java并发编程中的一个重要概念——ReadWriteLock,即读写锁。ReadWriteLock是`java.util.concurrent.locks`包下的一个接口,它是对传统互斥锁的一个扩展,...
Java中提供了`java.util.concurrent.locks.ReadWriteLock`接口来支持这种模式,但在本案例中,我们将模拟实现一个读写锁来理解其基本原理。 1. **读写锁接口定义**: - `Lock`接口:这是基础的锁接口,提供了获取...
在Java多线程编程中,读写锁是一种高级的同步机制,它允许多个线程同时读取共享资源,但只允许一个线程写入。这种锁的引入提高了并发性能,特别是在读操作远多于写操作的场景下。Java 5开始,`java.util.concurrent....
java_util_concurrent_user_guide_cn.pdf 内容预览: ...21. 读写锁 ReadWriteLock 22. 原子性布尔 AtomicBoolean 23. 原子性整型 AtomicInteger 24. 原子性长整型 AtomicLong 25. 原子性引用型 AtomicReference
根据提供的文件信息,本文将详细解析读写锁`ReentrantReadWriteLock`以及`StampLock`在Java并发编程中的应用场景及其实现原理。 ### 一、读写锁介绍 #### 1.1 读写锁的基本概念 读写锁是一种特殊的锁机制,它可以...
redisson实现分布式锁java源码软件架构:SpringBoot2.3.12.RELEASE + Maven3.6.2 + JDK1.8 + Redis-x64-3.2.100 + ...源代码中包含读写锁ReadWriteLock、常规锁和red锁,可通过controller包进去分别阅读源码和调试
1. java.util.concurrent - Java 并发工具包 ...21. 读写锁 ReadWriteLock 22. 原子性布尔 AtomicBoolean 23. 原子性整型 AtomicInteger 24. 原子性长整型 AtomicLong 25. 原子性引用型 AtomicReference
java_util_concurrent_user_guide_cn.pdf 内容预览: 1.... 读写锁 ReadWriteLock 22. 原子性布尔 AtomicBoolean 23. 原子性整型 AtomicInteger 24. 原子性长整型 AtomicLong 25. 原子性引用型 AtomicReferenc
使用 ForkJoinPool 进行分叉和合并,锁 Lock,读写锁 ReadWriteLock 原子性长整型 AtomicLong,原子性引用型 AtomicReference 修改数据: 一 服务端修改数据: 一 文章知识点与官方知识档案匹配,可进一步学习相关...
- `ReadWriteLock`接口定义了读写锁的行为,其具体实现类如`ReentrantReadWriteLock`。 ### 总结 Java中的锁机制对于保证多线程环境下的数据一致性至关重要。通过了解不同类型的锁及其特性,开发者可以根据实际...
Java多线程之readwritelock读写分离的实现代码 Java多线程之readwritelock读写分离的实现代码主要介绍了Java多线程之readwritelock读写分离的相关内容,文中涉及具体实例代码,具有一定参考价值,需要的朋友可以...
3. **读写锁(ReadWriteLock)**:读写锁也是`java.util.concurrent.locks`的一部分,它为读操作和写操作提供不同的锁。读锁是共享的,允许多个线程同时读取数据;写锁是独占的,一次只有一个线程能写数据。这种设计...
- **读写锁**(如ReadWriteLock)进一步细分为读锁和写锁,读锁可被多个线程共享,写锁是独占的,提高了读操作的并发性。 4. **可重入锁** - 可重入锁允许同一个线程多次获取同一把锁,例如Java的`synchronized`...
- **使用读写锁**:`ReadWriteLock`允许多个读取者同时访问,只有写入者时才会阻塞其他线程,提高并行性。 - **尝试使用乐观锁**:乐观锁假设冲突很少发生,只有在更新数据时检查是否被其他线程修改过,例如使用...
- **读写锁(ReadWriteLock)**:ReentrantReadWriteLock是Lock的一个实现,分为读锁(ReadLock)和写锁(WriteLock),允许多个读线程同时访问,但写锁是独占的。 - **条件变量(Condition)**:Lock接口提供了一...