当前位置: 首页 > news >正文

并发编程:线程同步基础:5、读写锁。ReentrantReadWriteLock

1、主要方法

.readLock().lock();获取读锁 读锁之间互不干扰。

.writeLock().lock();获取写锁 写锁可以锁定住读锁和其他写操作。

2、主程序

package xyz.jangle.thread.test.n2_5.rwlock;import java.util.concurrent.TimeUnit;/*** * 	读写锁。ReentrantReadWriteLock* @author jangle* @email jangle@jangle.xyz* @time 2020年7月22日 下午9:37:18* */
public class M {public static void main(String[] args) {RWInfo rwInfo = new RWInfo();// 读取价格1的线程new Thread(() -> {for (int i = 0; i < 20; i++) {rwInfo.getPrice1();try {TimeUnit.MILLISECONDS.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}}}).start();// 读取价格2的线程new Thread(() -> {for (int i = 0; i < 20; i++) {rwInfo.getPrice2();try {TimeUnit.MILLISECONDS.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}}}).start();// 修改价格1和价格2的线程new Thread(() -> {for (int i = 0; i < 3; i++) {rwInfo.setPrice1(rwInfo.getPrice1() + 1, rwInfo.getPrice2()+1);}}).start();}}

3、读写锁实体

package xyz.jangle.thread.test.n2_5.rwlock;import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;/*** * 读写锁,实体类* @author jangle* @email jangle@jangle.xyz* @time 2020年7月22日 下午9:26:57* */
public class RWInfo {private double price1, price2;private ReadWriteLock RWLock;public RWInfo() {super();this.price1 = 1.0;this.price2 = 2.0;RWLock = new ReentrantReadWriteLock();}public double getPrice1() {RWLock.readLock().lock();double v = price1;				// 赋值给中间变量,然后释放锁。System.out.println("读价格1信息:"+v);RWLock.readLock().unlock();return v;}// 读锁之间互不干扰public double getPrice2() {RWLock.readLock().lock();double v = price2;System.out.println("读价格2信息:"+v);RWLock.readLock().unlock();return v;}/*** 	写锁可以锁定住读锁和其他的写操作。 * * @author jangle* @time 2020年7月22日 下午9:35:11* @param price1* @param price2*/public void setPrice1(double price1, double price2) {RWLock.writeLock().lock();System.out.println("开始修改价格");this.price1 = price1;this.price2 = price2;try {// 睡眠3秒,让读锁锁定其他的读写操作TimeUnit.SECONDS.sleep(3);} catch (InterruptedException e) {e.printStackTrace();}RWLock.writeLock().unlock();}}

http://www.lryc.cn/news/272892.html

相关文章:

  • SpringBoot 集成 Kafka消息中间件,Docker安装Kafka环境
  • 阿里云Alibaba Cloud Linux 3镜像版本大全特性说明
  • 基于SSM的滁艺咖啡在线销售系统设计与实现
  • 【设计模式之美】理论一:怎么才算是单一原则、如何取舍单一原则
  • MYSQL 深入探索系列六 SQL执行计划
  • 安装jupyter notebook,jupyter notebook的简单使用
  • 宏集PC Runtime软件助推食品行业生产线数字化革新
  • python的课后练习总结3之条件语句
  • RedisTemplate序列化
  • 小米SU7汽车发布会; 齐碳科技C+轮融资;网易 1 月 3 日发布子曰教育大模型;百度文心一言用户数已突破 1 亿
  • Python----matplotlib库
  • PostgreSQL荣获DB-Engines 2023年度数据库
  • 【每天五道题,轻松公务员】Day3:太阳常识
  • 基于metersphere和supper-jacoco 测试覆盖率落地实践
  • LeetCode每周五题_2024/01/01~2024/01/05
  • 【华为OD机试真题2023CD卷 JAVAJS】抢7游戏
  • 14.7-时序反馈移位寄存器建模
  • 【设计模式】二十一.行为型模式之状态模式
  • 微服务实战系列之Dubbo(下)
  • 《剑指offer》数学第二题:求1+2+3+...+n
  • 阿里云服务器3M固定带宽速度快吗?
  • 美易官方:新年伊始美企狂发450多亿美元债券
  • [云原生] Go web工作流程
  • 【PostgreSQL】约束-主键
  • IDEA 控制台中文乱码问题解决方法(UTF-8 编码)
  • ssm基于BS的仓库在线管理系统的设计与实现论文
  • 鸿蒙HarmonyOs:为什么不支持热更新?
  • 修改 Ubuntu 的配置
  • 虹科方案|从困境到突破:TigoLeap方案引领数据采集与优化
  • 【教学类-43-02】20231226 九宫格数独2.0(n=9)(ChatGPT AI对话大师生成 回溯算法)