多线程模式(六)Read-Write-Lock

1 锁 

一����蔚�Java程式例子如下所示:
 public void readData() {
    lock.readLock();
    doRead();
    lock.readUnLock();
 }

 public void writeData() {
    lock.writeLock();
    doWrite();
    lock.writeUnLock();
 }
    
  �i的���F,在Java中可以用wait()、notify()����F,���F的片段如下:
 private boolean writerFirst = true; // ��入��先
 
 public synchronized void readLock() {
    try {
        while(writingWriters > 0 ||
                   (writerFirst && waitingWriters > 0)) {
            wait();
        }
    }
    catch(InterruptedException) {
    }

    readingReaders++;
 }
 
 public synchronized void readUnLock() {
    readingReaders--;
    writerFirst = true;
    notifyAll();
 }
 
 public synchronized void writeLock() {
    waitingWriters++
    try {
        while(readingReaders > 0 || writingWriters > 0) {
            wait();
        }
    }
    catch(InterruptedException) {
    }
    finally {
        waitingWriters--;
    }

    writingWriters++;
 }
 
 public synchronized void writeUnLock() {
    writingWriters--;
    writerFirst = false;
    notifyAll();
 }
   
    其中writerFirst是��入��先的旗�耍�它�_保只要有��入的�绦芯w在等待�r,在解除�i定的�r候,可以��先由��入�绦芯w取得�i定,以�_保�x取者�x取到 的�Y料可以是最新的,但缺�c就是��入的�幼骱茴l繁�r,�x取者必�等待的�C���⒃龆啵�相反的若�O定�樽x取��先,�t�x取�r的回��性��增高,但�Y料更新的速率�� ��下降,���H使用�r要偏好哪一方,必����用的�龊隙�定。        
 

2. 扩展思考方向:


2.1 该模式利用同时读取而不会产生冲突的特性,提高了程序的性能.

2.2 该模式适合读取操作比较繁重的情况.

2.3 该模式适合读取比写入操作频繁时.

2.4 锁定的意义:

使用synchronized,可以获取实例的锁定.Java程序的每个实例各有一个"锁定",同一个实例的锁定无法由两个以上的线程所获取.这是制定在JAVA语言规格里,实现在Java执行环境里的机制.故称为物理性的锁定.Java程序无法去改变这种锁定的行为.
      

你可能感兴趣的:(职场,休闲)