- 浏览: 468513 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
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 1360struts,spring,hiberate知识点。实际上对于 ... -
关联、聚合、组合的关系
2011-08-19 15:18 1357你和你的心脏之间是co ... -
深入JVM锁机制2-Lock
2011-08-19 11:04 1248分类: JVM 2011-07-28 18:15 92人 ... -
深入JVM锁机制1-synchronized
2011-08-19 11:01 1693分类: JVM 2011-07-28 ... -
CAS ABA问题
2011-08-19 10:55 4667首先要知道什么叫CAS(compare and swap):在 ... -
NIO学习系列:缓冲区内部实现机制
2011-08-17 13:55 993接上一篇NIO学习系列:核心概念及基本读写 ,本 ... -
HTTP协议及报文分析
2011-08-15 21:53 3757一次HTTP操作称为一个 ... -
String、StringBuffer与StringBuilder之间区别
2011-08-15 21:44 1052最近学习到StringBuffer,心中有好些疑问,搜 ... -
Java内存溢出
2011-07-13 11:25 1870内存溢出与数据库锁表的问题,可以说是开发人员的噩梦,一般的 ... -
Java nio 2.0 AIO
2011-07-12 21:26 13206按照《Unix网络编程》 ... -
使用Java NIO编写高性能的服务器
2011-07-12 21:16 1151从JDK 1.4开始,Java的标 ... -
如何中断一个正在运行的线程
2011-07-12 18:03 1732... -
准备问题
2011-07-12 12:06 936你觉得有什么优势 特长 捡干货说你对面试的公司有多了解 怎么看 ... -
NIO学习系列:核心概念及基本读写
2011-07-12 10:20 1125NIO学习系列:缓冲区内部实现机制 http://zh ... -
CAP原理和BASE思想
2011-07-12 10:16 1335分布式领域CAP理论,Co ... -
Java 中的悲观锁和乐观锁的实现
2011-07-12 10:07 1595锁(locking) 业务逻辑的实现过程中,往往需要保证数 ... -
详细介绍Spring事务管理
2011-07-12 09:47 8509在学习spring事务管理时, ... -
URL与URI区别
2011-07-12 09:46 1212今天在看STRUTS配置的时候,发 ... -
spring原理
2011-07-11 15:57 1013spring原理 spr ... -
Synchronized和java.util.concurrent.locks.Lock的区别
2011-07-11 15:24 5184主要相同点:Lock能完成Synchronized所实现的 ...
相关推荐
读写锁则是一种更高级的同步机制,它允许多个线程同时读取共享资源,但只允许一个线程进行写入。这种锁的特性提高了多线程环境下的并发性能,因为读操作通常是无冲突的。在易语言中,我们可以使用读写锁类来实现这一...
3. **锁升级与降级**:在某些高级实现中,读写锁支持锁升级和降级的概念。如果一个线程先持有了读锁,然后发现自己需要进行写操作,它可以升级为写锁。写操作完成后,如果可能,该线程可以降级回读锁,而不必立即...
在Linux高级程序设计中,主要介绍了三种线程同步机制:互斥锁、条件变量和读写锁,以及线程与信号的交互。 1. **互斥锁通信机制**: 互斥锁是用于保护临界区的一种机制,确保同一时间只有一个线程能访问共享资源。...
- **升级与降级**:某些高级读写锁支持读锁到写锁的升级或写锁到读锁的降级,这在某些复杂场景中很有用。 5. **Java中的ReentrantReadWriteLock**: Java的`ReentrantReadWriteLock`提供了可重入的读写锁功能,...
其中,读写锁(Read-Write Lock,简称RWLock)是一种高效的线程同步机制,适用于大量读取操作和少量写入操作的情况。在本文中,我们将深入探讨基于关键区的Windows读写锁类及其自动锁的实现原理和改进点。 读写锁的...
在Java多线程编程中,读写锁是一种高级的同步机制,它允许多个线程同时读取共享资源,但只允许一个线程写入。这种锁的引入提高了并发性能,特别是在读操作远多于写操作的场景下。Java 5开始,`java.util.concurrent....
读写锁是一种高级的线程同步机制,它允许多个读线程同时访问资源,而当有写线程正在操作时,所有其他线程(无论是读还是写)都会被阻塞,直到写操作完成。 在C++中,标准库提供了一个名为`std::shared_timed_mutex`...
在读写文件时,可以使用文件锁来防止多个线程同时写入。 4. **缓冲区(Buffer)与非阻塞IO**: - 使用缓冲区可以提高文件读写的效率,减少系统调用的次数。Java NIO(New IO)提供了缓冲区API,可以配合通道进行非...
在读写锁中,多个读线程可以同时访问共享资源,而写线程则具有独占性,即当一个线程在写入时,其他所有线程(无论是读还是写)都将被阻塞,直到写操作完成。读写锁通过这种方式提高了并发性能,因为在大多数情况下,...
读写锁是一种高级的同步机制,它允许多个线程同时读取共享资源,但只允许一个线程进行写操作。这在数据读取远比写入频繁的情况下可以显著提高系统的性能。 读写锁的核心在于它的两个主要方法:`ReadLock()` 和 `...
读写锁是多线程编程中的一个重要概念,它在C#中被广泛应用于提高并发访问数据的效率。本文将深入探讨C#中的读写锁及其使用,帮助你理解和掌握这一关键技能。 首先,读写锁提供了对共享资源的细粒度控制。在C#中,`...
"易语言线程安全之原子锁与读写锁"的主题涉及到两种用于实现线程安全的机制:原子操作和读写锁。 首先,我们来讨论原子操作。原子操作是一种特殊的操作,它不可分割,即在执行过程中不会被其他线程中断。在易语言中...
在Linux系统中,读写锁(Read/Write Locks,简称rwlocks)是一种多线程同步机制,它允许多个线程同时进行读操作,但只允许一个线程执行写操作。这种锁的设计目的是提高并发性能,特别是当读操作远多于写操作时。在...
读写锁(Read-Write Locks)是一种高级的锁机制,允许多个读线程同时访问共享资源,但写操作必须互斥进行。这样可以提高多线程环境下的并发性能。"rwlock.c"和"rwlock.h"文件包含了读写锁的实现,它通常包括获取读锁...
3. **升级与降级**:某些高级读写锁还支持锁的升级和降级。这意味着一个已经持有读锁的线程在需要进行写操作时,可以不释放读锁直接升级为写锁,完成写操作后再降级回读锁。这样的设计可以在某些场景下减少锁竞争,...
它是实现Java并发包中锁和其他同步器的基础框架,例如ReentrantLock(可重入锁)、Semaphore(信号量)、CountDownLatch(倒计时门闩)、CyclicBarrier(循环栅栏)以及ReentrantReadWriteLock(可重入读写锁)等。...
对于大块代码,可以考虑使用读写锁或者自旋锁等更细粒度的同步机制。 总的来说,线程互斥锁是保证多线程环境下数据一致性的重要工具,它的正确使用对于编写可扩展和可靠的并发程序至关重要。通过理解不同操作系统下...
在网络编程中,线程同步尤其重要,因为网络I/O操作通常是异步的,可能会引发多个线程同时对数据进行读写。在服务器端,线程可能需要处理并发的客户端请求,正确地同步这些线程可以确保服务的稳定性和响应速度。 ...
### Java线程教程知识点梳理 #### 一、教程概述 - **目标读者**: 本教程主要面向具备丰富Java基础知识但缺乏...此外,深入学习线程间通信、同步机制以及高级主题,将为解决实际项目中的多线程编程挑战打下坚实的基础。