- 浏览: 460159 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
mrshen:
很棒,在其他大神的博客上理清了思路看懂之后,来lz这里用例子学 ...
RED-BLACK(红黑)树的实现TreeMap源码阅读 -
a939639017:
yanf4j check不下来 ?
Java nio 2.0 AIO -
hellostory:
又是抄来的 - -
mysql分表方案 -
davidluoye:
为什么不说下支持的数据库呢?
模糊查询的优化 -
oliveevilo:
表示没看懂
Synchronized和java.util.concurrent.locks.Lock的区别
/** public class ReadWriteLock { |
这里设置了4个变量readingReader,writingWriter,waitingWriter,tendWrite,分别代表正在读的读者,正在写的写者,等待中的写者以及一个用来评估读还是写的判断条件。这个评估条件是非常有用的,它能够保证程序不会只运行读线程(因为读的量较大),而是适当的让出一些机会给写线程。读锁定中while(writingWriter > 0 || (tendWrite && waitingWriter > 0)) 就是存在正在写的线程(意味着现在的机会在写线程手中)或者评估为写并且正在等待的写线程超过一个(意味着之后的机会应该给写线程)那就得等待。而写锁的等待条件则是while(readingReader > 0 || writingWriter > 0) 意味着有正在运行的读或写线程,则必须等待,这体现了写的排他性。而这里waitingWriter++;后面又 finally{waitingWriter--;}可能觉得很奇怪,怎么加一会减一会的,其实这里用到了线程设计的before/after pattern,只有当进入wait而没有发生任何错我们才知道它在等待,可惜我们没办法在wait里设置,于是before wait,我们就用了waitingWriter++;表示已经开始等待了,而无论是被中断取消或是正常唤醒,我们都要waitingWriter--; 表示结束。解锁就不在解释了,注意观察评估变量的设定及其作用。
/**
public Queue(String str){ |
这个类是实际的资源类,主要就是read和write方法,read负责读出所有对象并将队列清空,而write负责写入对象。注意读写锁的使用。
注意这里是通过两个逻辑上实现的lockReader和lockWriter来锁定程序,跟synchronized不同的是,这两个锁实际上用到了synchronized,只是比它多了些判读条件。
/** public class Reader extends Thread{ |
Reader类。就是将read读入的内容显示出来。
/** public class Writer extends Thread{ |
Writer。负责写入一个request
/** /** |
主测试类。主要负责调用Reader和Writer
最后,值得提醒的是,类似这样的问题都能抽象出一个共同的特征:那就是读线程比较多或者读操作比较繁重。如果大多数线程是写操作的话,就得评估衡量用读写锁来解决是否合算了。
发表评论
-
中高级技术人员面试
2012-08-06 14:23 1323struts,spring,hiberate知识点。实际上对于 ... -
关联、聚合、组合的关系
2011-08-19 15:18 1318你和你的心脏之间是co ... -
深入JVM锁机制2-Lock
2011-08-19 11:04 1198分类: JVM 2011-07-28 18:15 92人 ... -
深入JVM锁机制1-synchronized
2011-08-19 11:01 1646分类: JVM 2011-07-28 ... -
CAS ABA问题
2011-08-19 10:55 4628首先要知道什么叫CAS(compare and swap):在 ... -
NIO学习系列:缓冲区内部实现机制
2011-08-17 13:55 949接上一篇NIO学习系列:核心概念及基本读写 ,本 ... -
HTTP协议及报文分析
2011-08-15 21:53 3709一次HTTP操作称为一个 ... -
String、StringBuffer与StringBuilder之间区别
2011-08-15 21:44 1021最近学习到StringBuffer,心中有好些疑问,搜 ... -
Java内存溢出
2011-07-13 11:25 1809内存溢出与数据库锁表的问题,可以说是开发人员的噩梦,一般的 ... -
Java nio 2.0 AIO
2011-07-12 21:26 13129按照《Unix网络编程》 ... -
使用Java NIO编写高性能的服务器
2011-07-12 21:16 1116从JDK 1.4开始,Java的标 ... -
如何中断一个正在运行的线程
2011-07-12 18:03 1677... -
准备问题
2011-07-12 12:06 908你觉得有什么优势 特长 捡干货说你对面试的公司有多了解 怎么看 ... -
NIO学习系列:核心概念及基本读写
2011-07-12 10:20 1099NIO学习系列:缓冲区内部实现机制 http://zh ... -
CAP原理和BASE思想
2011-07-12 10:16 1315分布式领域CAP理论,Co ... -
Java 中的悲观锁和乐观锁的实现
2011-07-12 10:07 1539锁(locking) 业务逻辑的实现过程中,往往需要保证数 ... -
详细介绍Spring事务管理
2011-07-12 09:47 8453在学习spring事务管理时, ... -
URL与URI区别
2011-07-12 09:46 1169今天在看STRUTS配置的时候,发 ... -
spring原理
2011-07-11 15:57 981spring原理 spr ... -
Synchronized和java.util.concurrent.locks.Lock的区别
2011-07-11 15:24 5119主要相同点:Lock能完成Synchronized所实现的 ...
相关推荐
多线程操作中保证线程安全的两个锁,原子锁只写了一个整数的;读写锁是 Windows 提供的一个精简版的读写锁,一般情况下也够用了。 使用说明和注意事项都在源码里,大家自己看吧,截图:
尚硅谷_JUC线程高级_ReadWriteLock 读写锁 ·12. 尚硅谷_JUC线程高级_线程八锁 ·13. 尚硅谷_JUC线程高级_线程池 ·14. 尚硅谷_JUC线程高级_线程调度 ·15. ForkJoinPool 分支合并框架-工作窃取
数据库操作支持库增加读写长整数字段的功能,但受限于系统接口暂不能读写超出整数范围的数值。 7. 修改高级表格支持库,通过鼠标调整行高列宽时不改变当前光标行列号。 8. 修改BUG:在IDE中打开源代码文件(.e)后...
详细介绍了linux系统下编程环境及编程工具、文件管理(文件类型、ansi以及posix标准下文件读写操作)、进程管理(创建、退出、执行、等待、属性...线程间同步(互斥锁、读写锁、条件变量)以及网络基本编程、高级应用等内容...
详细介绍了linux系统下编程环境及编程工具、文件管理(文件类型、ansi以及posix标准下文件读写操作)、进程管理(创建、退出、执行、等待、属性...线程间同步(互斥锁、读写锁、条件变量)以及网络基本编程、高级应用等内容...
详细介绍了Linux系统下编程环境及编程工具、文件管理(文件类型、ANSI以及POSIX标准下文件读写操作)、进程管理(创建、退出、执行、等待、...线程间同步(互斥锁、读写锁、条件变量)以及网络基本编程、高级应用等内容...
│ 013 跨进程读写内存.mp4, E0 ^0 U I1 h │ $ {. ?; O) C* w1 K. q) K └─驱动开发 01 驱动开发环境配置.mp4* W) g2 z& T/ _; @1 V" n 02 第一个驱动程序.mp4 03 如何调试驱动程序.mp4; [8 U2 T) B' V 04 ...
ConcurrentHashMap使用了分段锁(Segment)来实现并发的读写操作,每个Segment都相当于一个小的HashMap,将整个哈希表分成多个部分。这样可以同时进行多个线程的并发读写操作,不会阻塞其他线程的访问。 需要注意的...
2005-10-21 15:30 14164 3949 易语言模块大全\IC卡读写模块 1.0.ec 2002-06-24 10:54 5555 2002 易语言模块大全\IP地址编辑框2.0.ec 2002-03-26 10:00 1765 740 易语言模块大全\kernel模块.EC 2005-10-21 15:30 ...
2005-10-21 15:30 14164 3949 易语言模块大全\IC卡读写模块 1.0.ec 2002-06-24 10:54 5555 2002 易语言模块大全\IP地址编辑框2.0.ec 2002-03-26 10:00 1765 740 易语言模块大全\kernel模块.EC 2005-10-21 15:30 ...
2005-10-21 15:30 14164 3949 易语言模块大全\IC卡读写模块 1.0.ec 2002-06-24 10:54 5555 2002 易语言模块大全\IP地址编辑框2.0.ec 2002-03-26 10:00 1765 740 易语言模块大全\kernel模块.EC 2005-10-21 15:30 ...
7.8 读写锁 7.8.1 设计考虑 7.8.2 实现 7.9 引用计数 7.10 其他考虑 7.10.1 死锁避免 7.10.2 递归锁 7.10.3 阻塞还是自旋 7.10.4 锁什么 7.10.5 粒度和持续时间 7.11 例子分析 7.11.1 SVR 4.2/MP 7.11.2 Digital ...
同步原语:各种同步原语进行了深入分析,如互斥锁(Mutex)、读写锁(RwLock)、条件变量(Condvar)、屏障(Barrier)等。 并发集合:如何安全地在多线程环境中使用集合类型,如 Vec、HashMap
MySQL高级性能优化的关键点: 数据库设计和规范化:确保数据库表结构合理、字段类型正确,并进行适当的规范化,以减少数据冗余和提高查询效率。 索引优化:根据查询需求创建适当的索引,避免过多或不必要的索引,...
线程锁之重入锁.docx 线程间的通信.docx 虚拟机内存结构和垃圾回收docx.docx 锁分类的了解.docx 集合的扩容机制.png SpringMVC部分.docx Spring部分.docx 第一题.pdf 第七题 谈谈MySQL支持的事务隔离级别 (1).pdf 第...
内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...
Python教程可以从基础入门开始,逐步深入到高级编程和实际... 学习Python的多线程和多进程编程,了解GIL(全局解释器锁)的概念和影响。 三、Python高级特性 掌握Python的装饰器、生成器、迭代器、闭包等高级特性。
ACCESS到高级表格.ec Access操作.ec ACCSEE记录显示到超级列表框模块.ec ACSII加解密模块2.0.ec AD.ec ADO方式填充树型框.ec API操作模块.ec Base64编解码.ec BASE64编解码模块.ec Bios信息.ec BMP滤镜...
9.3.2 读写锁的操作函数 9.4 记录上锁 9.4.1 记录上锁的基本原理 9.4.2 fcntl记录上锁 9.4.3 记录上锁应用举例 9.5 本章小结 第10章 多路复用和信号驱动i/0 10.1 多路复用 10.1.1 多路复用的基本原理...