易截截图软件、单文件、免安装、纯绿色、仅160KB

Java线程之Read Write Lock Pattern

Read-Write Lock Pattern的参与者:
1. Reader(读取者)参与者
    Reader参与者会对SharedResource参与者进行read。
2. Writer(写入者)参与者
    Writer参与者会对SharedResource参与者进行write。
3. SharedResource(共享资源)参与者
    SharedResource参与者代表Reader与Writer所共享的资源。
    SharedResource参与者会提供不会改变内部状态的操作(read)和会改变内部状态的操作(write)。
4. ReadWriteLock(读写用锁定)参与者
    ReadWriteLock参与者提供了对SharedResource参与者进行read操作与进行write操作时需要的锁定。
    为了完成read操作,提供了readLock与readUnlock。
    为了完成write操作,提供了writeLock和writeUnlock。
------------------------------
Read-Write Lock Pattern适合读取比写入次数频繁的情况。
Read-Write Lock Pattern李永乐读取操作彼此之间不会冲突的特性,使得多个Reader参与者可以同时进行read,以提升程序的性能。
不过当写入操作频率较高时,Writer参与者会经常阻拦Reader参与者的read操作的进行,这样也就无法展现Read-Write Lock Pattern的优点了。
------------------------------
一个 ReadWriteLock参与者的实现:
public final class ReadWriteLock{
private int readingReaders = 0; // 实际正在读取的线程数
private int waitingWriters = 0; // 正在等待写入的线程数
private int writingWriters = 0; // 实际正在写入的线程数
private boolean preferWriter = true; // 是否写入优先
public synchronized void readLock() throws InterruptedException{
while(writingWriters >0 ||(preferWriter && waitingWriters >0)){
wait();
}
readingReaders++;
}
public synchronized void readUnlock() throws InterruptedException{
readingReaders--;
notifyAll();
}
public synchronized void writeLock() throws InterruptedException{
waitingWriters++;
try{
while(readingReaders>0||writingWriters>0){
wait();
}
}finally{
waitingWriters--;
}
writingWriters++;
}
public synchronized void writeUnlock() throws InterruptedException{
writingWriters--;
noti


相关文档:

JAVA关键字详解

JAVA关键字详解
1 final数据:
   1>对于基本类型前加以final修饰,表示被修饰的变量为常数,不可以修改。一个既是static有是final的字段表示只占据一段不能改变的存储空间。
   2>final用于对象应用时,final使应用恒定不变。一旦引用被初始化指向一个对象,就无法再把它指向另一个对象。
& ......

Java 编程技术中汉字问题的分析及解决

Java 编程技术中汉字问题的分析及解决
现在 Java 编程语言已经广泛应用于互联网世界,早在 Sun 公司开发 Java 语言的时候,就已经考虑到对非英文字符的支持了。Sun 公司公布的 Java 运行环境(JRE)本身就分英文版和国际版,但只有国际版才支持非英文字符。不过在 Java 编程语言的应用中,对中文字符的支持并非如同 Java S ......

SHA 1摘要算法源码(java版)

public class SHA1 {
    private final int[] abcde = {
            0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0
        };
    // 摘要数据存储数组
  &nb ......

DES加密算法源码(java版)

public class DES {
    // 声明常量字节数组
    private static final int[] IP = {
            58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4, 62, 54,
         ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号