易截截图软件、单文件、免安装、纯绿色、仅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常用字符集编码详解
      Web开发的时候经常会遇到一些字符编码的错误,如页面乱码等问题,所以有必要需对字符编码有所了解,以下是Ricki收集的一些资料(可能不是很全,但希望对你有所帮助)
      Java标准字符集:所谓Java标准字符集,就是Java平台支持的字符 ......

Effective Java 学习笔记(3)

在实现singleton模式时,我们有以下几种方法。 1. public static final 字段加上private 的构造函数。 public class Singleton{
            public static final Singleton INSTANCE = new Singleton();
       &# ......

java单例类继承问题 使用登记式单例的发现

由于常见的单例模式,饿汉式单例和懒汉式单例,构造方法都私有了,因此不能被继承.
最近在开发中遇到问题了,恰好需要继承单例类.找资料才找到了这个解决办法---登记式单例.
登记式单例类是为了克服饿汉式单例类及懒汉式单例类均不可继承的缺点而设计的。当单例类需要被继承时适用.
代码清单3:登记式单例类
import java.u ......

Java的Container示例程序

package com.tiantian;
import java.util.*;
public class JAVAContainer {
public static void main(String[] args) throws Exception {
// ArrayList
{
ArrayList arraylist = new ArrayList();
arraylist.add(0, "end");//指定索引加入值
// 需注意的是,如果现有2个值,我尤胨饕?的那么就会出现异常
f ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号