首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
蕾姆是我女神
2018-11-23 18:45
已编辑
青州街男子职业技术学院 Java
关注
已关注
取消关注
忽然想不通了,Java里的读写锁里的读锁有什么用?
ReentrantReadWriteLock里的readLock有什么用?
看百度上有个人说这样能让多线程不阻塞进入临界区,
可是不加锁的话多线程不是都可以访问临界区吗?
如果阻塞的话怎么会出现线程安全问题……
求大佬指点迷津,加读锁和不加读锁有啥区别。
提示
全部评论
推荐
最新
楼层
Albertnet
中国移动_PaaS产品部_软件开发工程师
读-写锁 (1)读写锁的出现原因: ReentrantLock实现一种标准的互斥锁,每次最多只有一个线程能持有ReentrantLock,限制了并发性,互斥是一种保守的加锁策略,虽然避免了“写/写”冲突和“写/读”冲突,但也避免了“读/读”冲突,而大部分情况下读操作比较多,如果此时能够放宽加锁需求,允许多个读操作的线程同时访问数据结构,可以提升程序的性能(只要每个线程保证读取到最新的数据,并且在读取数据时不会有其他线程修改数据就行) (2)ReentrantLock提供的非互斥的读写锁的定义 1)一个资源可以被多个读操作访问,或者被一个写操作访问,但两者不能读写操作同时进行。2)读-写锁是一种性能优化措施,可以实现更高的并发性,提高程序的性能。3)当锁的持有时间较长并且大部分操作都不会修改被守护的资源时,读-写锁可以提高并发性。
2
回复
分享
发布于 2017-09-03 08:02
JasWag
山东工商学院 Java
总的来说 读写互斥和读锁共享,再来说场景 单/多线程 1、单线程:锁可重入(多个读或多个写) 2、多线程:当前线程读阻塞其他线程写,当前线程写阻塞其他线程读写
1
回复
分享
发布于 2021-11-28 17:38
吃口屎冷静下
Java
读读不互斥,读写互斥,写写互斥
4
回复
分享
发布于 2017-09-02 22:40
March..
Санкт-Петербургский государственный университет информационных технологий, механики и оптики Java
防止读的时候其他线程写,允许读的时候其他线程读
3
回复
分享
发布于 2017-09-02 22:35
驼君
北京工业大学 Java
加读锁应该是防止在写入的时候读取,防止读取脏数据
2
回复
分享
发布于 2020-03-10 17:18
厨师沙拉.
重庆大学 后端工程师
刚学到这里,回复下自己的看法。因为读写锁锁住的不是共享资源,而是临界区,临界区里是对共享资源的操作,读写锁能控制多线程里的临界区对于共享资源访问的动作,但是不能控制共享资源不被别人访问。没有在锁住的临界区内的其它的线程依旧可以访问共享资源。所以如果不加读锁就会导致写的时候,共享资源被读。有此类问题的朋友可以试着写一下代码跑一下看看。
点赞
回复
分享
发布于 2022-02-16 22:54
牛客520318129号
加读锁,保证可重复读。 加写锁,自己写,也阻塞别人读,因为数据正在改动。
点赞
回复
分享
发布于 2020-12-04 23:00
雪刚
西北工业大学 Java
关键理解是同一锁对象 :用同一个锁对象, 在加了写锁的代码块执行期间,能阻塞 对该锁对象加写锁,当然也阻塞了写锁加锁和解锁之间的代码块的执行。
点赞
回复
分享
发布于 2018-11-23 18:28
等待offer
广东 Java
请求读锁的线程进去之后,其他请求读锁线程可以继续进入。但此时,请求写锁的线程不能进入,会被阻塞,直到所有请求读锁的线程结束之后,才有可能进入。
点赞
回复
分享
发布于 2017-09-03 07:43
Thare
淘天集团_技术专家
读锁:共享锁 写锁:排它锁
点赞
回复
分享
发布于 2017-09-03 02:00
浮生一梦暗若痴
老和山职业技术学院 C++
等你用到的时候就理解了
点赞
回复
分享
发布于 2017-09-03 01:26
都拿我当备胎
蓝翔技校 Java
h_b吧
点赞
回复
分享
发布于 2017-09-03 00:04
向宇前桌
查硕 Java
处理高并发
点赞
回复
分享
发布于 2017-09-02 23:57
见习精神病
天津财经大学 Java
加了读锁别的线程如果要加写锁就阻塞了呀
点赞
回复
分享
发布于 2017-09-02 22:42
暂无评论,快来抢首评~
相关推荐
03-03 14:03
山东大学 嵌入式软件工程师
面试官问“RAG各模块的优化策略有哪些”,怎么回答?
说实话,这道题放在以前,我的反应都是:不就是向量数据库加个大模型吗?但我也清楚,如果真这么答,基本等于告诉我只会调API。真正的生产级RAG是一套精密的工程系统。今天把它拆成四个模块,帮你建立一套完整的面试作答框架。模块一:数据清洗与离线索引垃圾进,垃圾出。原始数据里混着乱码和格式错乱的PDF,模型不可能检索得准。语义分块是第一个优化点。过去按固定字符数切分(比如500字一段),经常把一句话拦腰截断,语义全丢。现在要根据标题、段落结构甚至用模型来判断断点,保证每个分块语义完整。进阶策略是父子块检索:把文档切成小碎块用于检索(精度高),但喂给模型时把它所在的父块一并带上(上下文全)。小块检索准,...
查看16道真题和解析
点赞
评论
收藏
分享
03-04 16:26
东莞理工学院 Java
百度国际网盘安卓一面(02/04)
年前面的一共两轮面试,二面挂了,十分的可惜呀,虽然我作为一个纯JAVA选手,还是临时准备了一些安卓开发的一些内容,但是二面还是应付不过,整理一下面试题吧1. 做一个自我介绍2. HTTP、Socket 有什么差别3. WebSocket 是什么,和 HTTP、Socket 区别4. TCP 如何保障传输可靠5. TCP 拥塞控制有哪些方法6. HTTPS 原理,和 HTTP 区别7. 为什么用 NIO,相比 BIO 解决了什么问题8. 继承、封装、多态9. 重写和重载的区别10. Java 四种引用是什么,有什么区别、使用场景11. GC 可达性分析算法12. GC Roots 有哪些13. Java 异常种类,Exception 和 Error 区别14. 什么是泛型,泛型擦除是什么15. 泛型通配符类型有哪些16. ArrayList 底层结构和扩容模式17. ArrayList 和 LinkedList 区别18. HashMap 底层结构19. JDK 1.8 之后 HashMap 有什么变化20. HashMap 线程安全吗,为什么21. ConcurrentHashMap 1.7 和 1.8 区别22. 线程池工作原理23. 线程池队列满、最大线程也满,再添加任务会怎样24. 线程池拒绝策略有哪些25. JDK 预置线程池有哪些,有什么问题26. IO 密集型和计算密集型线程池怎么配置27. Java 中保证线程安全的机制还有哪些28. 协程了解吗,Go 和 Kotlin 协程对比29. 什么是 Spring IOC,作用是什么30. 安卓里自己实现 IOC 容器思路31. 什么是依赖注入 DI32. 自己设计依赖注入框架怎么做33. 什么是 AOP 思想,应用场景34. 什么是高级函数35. 延时任务实现方式有哪些36. Activity 生命周期37. Activity 弹弹窗生命周期有什么变化38. Android 四大组件及其作用39. 开发中常用哪些设计模式,怎么用40. MVC、MVP、MVVM 介绍41. 职业规划方向,和客户端开发会不会冲突42. 低代码/AI 辅助开发你是怎么做的43. 怎么提升 AI 生成代码效果44. 有没有做前后端规范约束生成效果45. 手写:链表反转(不使用额外内存)个人感想:面试官人很好,感觉挺和蔼的,题的话也是基础偏多一点,基本上都能回答出来,然后也是很快就约了二面了
吃不饱的迪恩很紧张:
这么多
点赞
评论
收藏
分享
03-10 10:54
门头沟学院 C++
荣耀 通用软件开发-C++ 二面
1. 自我介绍2. 你在实习里做过的最复杂的模块是什么,难点在哪里3. 如果让你设计一个配置热更新系统,你会怎么保证正在处理的请求不受影响答案:新配置可以安全生效正在处理中的请求继续使用它开始处理时看到的那份配置比较常见的做法是 快照 + 原子切换。思路是:当前业务线程始终读取一个稳定版本的配置快照配置更新时,不在原对象上直接修改而是构造一个新的配置对象校验通过后,再用原子方式把“当前版本指针”切到新对象老版本由正在使用它的线程继续持有,等没有引用后再释放这样做的好处是:读路径简单不需要长时间锁住整个配置结构不会让业务线程读到半更新状态回滚也更容易做代码: #include <atomi...
C++ 常考面试题总结
点赞
评论
收藏
分享
03-01 01:30
昆明理工大学 算法工程师
ai infra实习 阿里云面经
大概四十分钟结束,聊家常一样项目拷打1. 你觉得现在llm推理瓶颈在哪。2. 问了我一个工作怎么建模互联的。3. 然后又对着这个工作挖了一些。4. 怎么看待未来硬件形态。5. 发文章怎么看
查看5道真题和解析
点赞
评论
收藏
分享
02-25 02:18
已编辑
美团_Java后端开发(实习员工)
实在智能Java一面面经 (30min速通)
1~5.个人信息,实习等。6. 简单说说MySQL的索引?7. 为什么需要引入索引?8. 有10个查询SQL,是否可以创建10个索引?9. 了解最左匹配原则吗?联合索引ABC,查询where A and B会命中索引吗?10. 联合索引ABC,查询where B and C会命中索引吗?11. 做过索引相关的优化吗?如何判断写的SQL好坏?12. 用过explain吗?其作用是什么?核心关注哪些字段?13. 遇到过回表吗?回表是什么?如何避免回表?14. 做过分页吗?OFFSET+LIMIT跨1万页和跨1页有区别吗?15. 若分页按姓名排序(非ID),如何解决深度分页问题?16. Java线程池有几种创建方式?17. 手动创建线程池的核心参数有哪些?18. 调用并发量为1的API(如短信API),线程池核心参数该如何设置?19. 核心线程数设为1时,阻塞队列数该如何设置?20. 若线程数很大,如何保证API同一时刻仅被调用一次(抛开线程池)?21. 本地加锁的代码在多实例部署时,还能控制API调用并发吗?22. 操作Redis缓存和数据库时,先删缓存还是先提交事务?有哪些解决方案?23. 核心业务服务与统计服务通过MQ交互,统计库无数据该如何排查?MQ挂了时,应用层该如何兜底保证消息不丢失?24. 候选人主动提问:后续面试流程是什么?面试官对自己的回答有何建议?0224下午一面,0224晚上7点二面。
查看36道真题和解析
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
15
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
谁都可能在说谎,但财报不会骗人
2.2W
2
...
大模型Agent面试全攻略(附答题思路)
1.4W
3
...
我感觉我遇到神仙mentor了
9842
4
...
春招产品内卷到什么程度了
5995
5
...
秋招失利别慌,好offer不怕晚
5433
6
...
字节一二三hr面 java面经(已off)
5130
7
...
携程工作体验
4968
8
...
只有我觉得暑期很难找吗?!
4140
9
...
入职翼支付2年多,聊聊感受
3982
10
...
上线一个月了,说几句真心话
3780
创作者周榜
更多
正在热议
更多
#
Agent面试会问什么?
#
20240次浏览
716人参与
#
运营每日一题
#
134193次浏览
927人参与
#
厦门银行科技岗值不值得投
#
18170次浏览
419人参与
#
给工作过的公司写一条大众点评,你会怎么写?
#
6554次浏览
102人参与
#
拼多多工作体验
#
54751次浏览
367人参与
#
烂工作和没工作哪个更痛苦?
#
14989次浏览
236人参与
#
一人分享一个skill
#
5087次浏览
142人参与
#
哪些公司一直卡在简历筛选
#
99021次浏览
299人参与
#
我们是不是被“优绩主义”绑架了?
#
43671次浏览
536人参与
#
春招至今,你收到几个面试了?
#
56710次浏览
788人参与
#
央国企投递记录
#
186911次浏览
1709人参与
#
面试体验最好和最差的公司
#
17785次浏览
105人参与
#
你觉得专业和学校哪个对薪资影响最大
#
103826次浏览
613人参与
#
AI替代不了什么?
#
9895次浏览
139人参与
#
机械人面试中的常问题
#
266926次浏览
3692人参与
#
我是XXX,请攻击我最薄弱的地方
#
71676次浏览
474人参与
#
现在入门AI首先要做什么?
#
3351次浏览
83人参与
#
你收到了团子的OC了吗
#
1582806次浏览
11849人参与
#
神州数码信息服务股份有限公司笔试
#
3410次浏览
21人参与
#
面试尴尬现场
#
223945次浏览
868人参与
#
你被哪些公司挂了?
#
172036次浏览
963人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务