package com.using.weixin.action;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class WxTest {
static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static void main(String[] args) throws InterruptedException {
Data data = new Data();
//多个线程执行读操作可同时进行
// Worker t1 = new Worker(data, true);
// Worker t2 = new Worker(data, true);
// t1.start();
// t2.start();
//多个线程同时执行执行读写操作时,写操作等待读操作完后才执行
// Worker t1 = new Worker(data, true);
// Worker t2 = new Worker(data, false);
// t1.start();
// t2.start();
//多个线程同时执行执行读写操作时,读操作等待写操作完后才执行
// Worker t1 = new Worker(data, false);//写操作
// Worker t2 = new Worker(data, true);
// t1.start();
// t2.start();
//多个线程同时执行执行写操作时,按照先后顺序执行(谁先占用谁先写)
Worker t1 = new Worker(data, false);//写操作
Worker t2 = new Worker(data, false);
t1.start();
t2.start();
}
static class Worker extends Thread {
Data data;
boolean read;
public Worker(Data data, boolean read) {
this.data = data;
this.read = read;
}
public void run() {
if (read)
data.get();
else
data.set();
}
}
static class Data {
ReadWriteLock lock = new ReentrantReadWriteLock();
Lock read = lock.readLock();
Lock write = lock.writeLock();
public void set() {
write.lock();
System.out.println(Thread.currentThread().hashCode()
+ " set:begin " + sdf.format(new Date()));
try {
Thread.sleep(2000);
//
} catch (Exception e) {
} finally {
System.out.println(Thread.currentThread().hashCode()
+ " set:end " + sdf.format(new Date()));
write.unlock();
}
}
public int get() {
read.lock();
System.out.println(Thread.currentThread().hashCode()
+ " get :begin " + sdf.format(new Date()));
try {
Thread.sleep(2000);
//
} catch (Exception e) {
} finally {
System.out.println(Thread.currentThread().hashCode()
+ " get :end " + sdf.format(new Date()));
read.unlock();
}
return 1;
}
}
}相关推荐
华为铁三角(AR、SR、FR)的考核指标设计
以和为核心,通过和实现协同。考核维度分为和,并随市场阶段动态调整权重。
ReadWriteLock(读写锁)
ReadWriteLock ReadWriteLock也是一个接口,提供了readLock和writeLock两种锁的操作机制,一个资源可以被多个线程同时读,或者被一个线程写,但是不能同时存在读和写线程。 读锁:共享锁 readLock **写锁:**独占锁 writeLock 读写锁 : 一个资源可以被多个读的线程进行访问 ,或者可以被一个写的线程访问, 但是不能同时存在读和写进程 ,读写互斥,读读共享。 读的时候可以多个线程一起读 写的时候只能一个线程写 使用示例: 向map中添加和读取值 p
TestFlight分发测试app,提示无法安装 所请求的App不可用或者不存在
TestFlight分发测试app,提示无法安装 所请求的App不可用或者不存在
读写锁精讲:Java中使用ReadWriteLock提升性能的终极指南
在并发编程中,ReadWriteLock是一个锁,它允许多个线程同时读共享数据,而写操作则是互斥的。这意味着如果没有线程正在对数据进行写入,那么多个线程可以同时进行读取操作,从而提高程序的性能和吞吐量。
用itext读取PDF文件提取对应得字符串
一.maven导入jar包 <!--pdf解析start--> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.10</version...
LangChain开发避坑指南:为什么Pylance总提示‘无法解析导入‘?实测7种修复方案
本文深入解析了在VS Code中使用LangChain开发时,Pylance频繁提示‘无法解析导入’的根本原因——Python解释器与语言服务器的环境路径不一致。文章提供了从基础排查到深度配置的7种实测修复方案,包括切换解释器、配置extraPaths、使用pyrightconfig.json等,旨在帮助开发者彻底解决此问题,提升AI应用开发效率。
读写锁ReadWriteLock
在jdk帮助文档中是这么说的:A ReadWriteLock维护一对关联的locks,一个用于只读操作,一个用于写操作。read lock可以由多个阅读器同时进行,只要没有作者 write lock 是独家的 意思就是读操作可以被多个线程同时读,写操作只能由一个线程去写 ReadWriteLock同Lock一样也是一个接口,提供了readLock和writeLock两种锁的操作机制,一个是只读的锁,一个是写锁。ReentranReadWriteLock是其...
SAP FICO 银企直联实战:从配置到异常处理的全流程解析
本文详细解析了SAP FICO银企直联的实战配置与异常处理全流程,涵盖银行主数据搭建、支付类配置、银行接口适配等关键步骤。通过实际案例分享,帮助用户掌握实时付款、余额监控和自动对账等核心功能,提升企业财务效率与安全性。特别针对常见问题如凭证重复付款、前置机UUID冲突等提供了实用解决方案。
ReadWriteLock(读写锁)的特性及使用
在实际应用中,有种普遍的并发场景:那就是读多写少;这种情况下如果使用互斥锁实现的话效率却不尽人意,一般来说读操作并不对数据的完整性造成破坏,这种互斥等待显然是不合理的;这时候就可以用到我们今天所说的主角:ReadWriteLock,接下来就让我们一步步揭开它神秘的面纱...
Sigrity Power SI 3D-EM Full Wave Extraction模式如何进行S参数提取和观测3D电磁场和远场实例分析(一)-差分过孔结构
Sigrity Power SI 3D-EM Full Wave Extraction模式如何进行S参数提取和观测3D电磁场和远场操作指导(一)详细介绍了3D-EM Full Wave Extraction全波S参数提取,下面以一个差分过孔结构进行实例分析,以下图为例。模式如何进行S参数提取和观测3D电磁场和远场实例分析(一)-差分过孔结构。是一个简单的4层板,top换层到bottom层的差分过孔结构。起始频率为100Mhz,截止频率为20Ghz,线性扫描。上面那根曲线是插损,下面那根线是回损。
知识图谱构建中的数据清洗:AI原生应用高质量图谱的前提
数据清洗是知识图谱构建的核心前置环节,直接决定AI原生应用(如智能问答、个性化推荐、决策支持系统)的图谱质量与应用效能。本文以第一性原理为起点,系统解析数据清洗的理论框架、技术架构与工程实践,覆盖从多源异构数据的噪声检测到高质量知识三元组(实体-关系-实体)生成的全流程。通过层次化概念映射(专家→中级→入门)、数学形式化建模及工业级案例分析,揭示数据清洗在解决实体歧义、关系冲突、结构不一致等关键问题中的技术逻辑,并展望基于大模型的智能清洗范式演化。Completeness(完整性)
Java通俗易懂30天 第19天:多线程(下)
文章目录 文章目录文章目录第8章 多线程线程的生命周期线程的同步同步代码块处理实现Runnable的线程安全问题同步代码块处理继承Thread类的线程安全问题同步方法处理实现Runnable的线程安全问题同步方法处理继承Thread类的线程安全问题线程安全的单例模式之懒汉式死锁的问题Lock锁方式解决线程安全问题线程的通信sleep()和wait()的异同经典例题:生产者/消费者问题JDK5.0新增线程创建方式创建多线程的方式三:实现Callable接口使用线程池的好处创建多线程的方式四:使用线程池 ..
dolphinscheduler-3.4.0
dolphinscheduler集群部署
java锁-ReadWriteLock
java锁-ReadWriteLock 详细讨论java中ReadWriteLock实现类的底层加锁原理和应用。 文章目录java锁-ReadWriteLock前言总结 前言 总结 提示:这里对文章进行总结: 例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。 ...
怀旧版电脑GBC模拟器
再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。
廖雪峰Python教程[完整版]
廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白
Java-并发-锁-ReadWriteLock
Java-并发-锁-ReadWriteLock 摘要 现在大家开发程序,大多是在多线程场景,就会用到各种锁。 但其实往往读和读之间是不冲突的,是无状态无修改的,不应该互相互斥。我们往往只需在读写或者写与写之间互斥即可。在JDK中就直接提供了一个ReadWriteLock,本文会介绍其基本概念及分析源码。 0x01 基本概念 ReadWriteLock的互斥关系如下表: 读 写 读...
Devexpress16.2.6破解工具
Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具
Java并发编程之显示锁ReentrantLock和ReadWriteLock读写锁
原文地址: https://www.jb51.net/article/64012.htm 简介 这篇文章主要介绍了Java并发编程之显示锁ReentrantLock和ReadWriteLock读写锁,本文讲解了ReentrantLock概况、Lock接口、Lock使用、轮询锁的和定时锁、公平性、可中断获锁获取操作等内容,需要的朋友可以参考下 在Java5.0之前,只有synchronized(内置...
Probability and Statistics - 4th edition
Probability and Statistics - 4th edition
并发编程 Java 三把锁(Synchronized、ReentrantLock、ReadWriteLock)
Lock、ReentrantLock与Synchronized很相似,对对象加锁 Lock接口: public interface Lock { void lock(); void lockInterruptibly() throws InterruptedException; boolean tryLock(); boolean tryLock(long time...
java锁: ReadWriteLock 和 StampedLock的对比
ReadWriteLock 并发读多写少,为了控制并发操作的粒度,Java提供了读写锁。读操作之间不需要互斥,遇到写的时候会互斥。StampedLock ReadWriteLock实际用的时候表现不尽如人意,主要还是因为相对比较大的开销。所以引入了StampedLock,引入优化读模式。优化读基于假设,大多数情况下读操作并不会和写操作冲突,其逻辑是先试着修改,然后通过validate方法确认是否进入了写模式,如果没有进入,就成功避免了开销;如果进入,则尝试获取读锁。
java writelock 问题_Java并发编程之显示锁ReentrantLock和ReadWriteLock读写锁
在Java5.0之前,只有synchronized(内置锁)和volatile. Java5.0后引入了显示锁ReentrantLock.ReentrantLock概况ReentrantLock是可重入的锁,它不同于内置锁, 它在每次使用都需要显示的加锁和解锁, 而且提供了更高级的特性:公平锁, 定时锁, 有条件锁, 可轮询锁, 可中断锁. 可以有效避免死锁的活跃性问题.ReentrantLock...
java readwritelock_Java中锁的应用之-ReadWriteLock
上面我们用儿子和父亲做了一个例子,儿子太猖狂了,花钱根本没有谱。下面我们再做一个例子,讲解ReadWriteLock的使用,例子和刚才差不多,但是又多了一个角色母亲,而且父母只负责监督,不再存钱。儿子每三秒都会去花钱一次,而父母每秒都在监督这个卡的使用情况。所有ReadWriteLock实现都必须保证writeLock操作的内存同步效果也要保持与相关readLock的联系。也就是说,成...
详解Java多线程锁之Lock和ReadWriteLock
Lock接口的实现类 ReentrantLock是实现了Lock接口的类,属于独享锁,独享锁在同一时刻仅有一个线程可以进行访问。Lock接口很简单,实现了如下: public interface Lock { void lock(); void lockInterruptibly() throws InterruptedException; boole...
java8 锁_Java 8:StampedLock、ReadWriteLock以及synchronized的比较
原文链接 作者:Tal Weiss 译者:iDestiny 校对:郭蕾同步区有点像拜访你的公公婆婆。你当然是希望待的时间越短越好。说到锁的话情况也是一样的,你希望获取锁以及进入临界区域的时间越短越好,这样才不会造成瓶颈。对于方法和代码块,语言层面的加锁机制是synchronized关键字,该关键字是由HotSpot虚拟机内置的。我们在代码中分配的每一个对象,如String、Arr...
Java 锁系列(二)——ReentrantLock 和 ReadWriteLock基础运用
Lock 接口提供了与 synchronized 相似的功能,和 synchronized 不同的是,Lock 在使用的时候需要显示的获取和释放锁。虽然牺牲了隐式获取释放锁的便捷性,但是对于锁的操作具有更强的可操作性、可控制性以及提供可中断操作和超时获取锁等机制。本文将描述 ReentrantLock 和 ReadWriteLock 锁的基础使用。 一、ReentrantLock 运用 package com.nineya.test; import java.util.concurrent.Executo
Java JUC 高级线程之十 读-写 锁 ReadWriteLock
文章目录ReadWriteLock ReadWriteLock ReadWriteLock维护了一对相关的锁,一个用于只读操作,一个用于写入操作。只要没有writer,读取锁可以由Reader线程同时保持,但写入锁是独占的。 ReadWriteLock读取操作通常不会改变共享资源,但执行写入操作时,必须用独占方式来获取锁。对于读取操作占多数的数据结构。ReadWriteLock能提供比独占锁更高...
Java并发编程(七):ReadWriteLock读写锁与线程八锁
ReadWriteLock读写锁与线程八锁 场景 什么情况下采用读写锁? 写写操作/读写操作 需要互斥 读读操作 不需要互斥 如果都用独占锁,有时候很多读操作并发时其实并不需要锁住缺上了锁,导致效率低下,可以采用读写锁来代替: import java.util.Random; import java.util.concurrent.locks.ReadWriteLock; import jav...
2768



被折叠的 条评论
为什么被折叠?



