如果你不加读锁,那么就不会受到写锁的限制。也就是说读线程可以读数据。
看下面我写的简单例子import java.util.concurrent.locks.ReentrantReadWriteLock;
import java.util.concurrent.locks.Lock;public class TestReadWriteLock{
public static void main(String[] args) throws InterruptedException{
ReadWriteData rwd = new ReadWriteData();
ReadThread rt = new ReadThread(rwd);
WriteThread wt = new WriteThread(rwd);
wt.start();
Thread.sleep(2000);
rt.start();
}
}class ReadThread extends Thread{
private ReadWriteData rwd;
public ReadThread(ReadWriteData rwd){
this.rwd = rwd;
}

public void run(){
System.out.println("result:"+rwd.getResult());
}
}class WriteThread extends Thread{
private ReadWriteData rwd;
public WriteThread(ReadWriteData rwd){
this.rwd = rwd;
}

public void run(){
rwd.setResult();
}
}class ReadWriteData{
private ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();
private Lock readLock = rwl.readLock();
private Lock writeLock = rwl.writeLock();
private int a = 0;

public int getResult(){
//readLock.lock();
try{
System.out.println("Reading Start...");
return a;
}finally{
//readLock.unlock();
}
}

public void setResult(){
writeLock.lock();
try{
System.out.println("Writing Start...");
Thread.sleep(10000);
a++;
System.out.println("Writing End...");
}catch(InterruptedException e){
}finally{
writeLock.unlock();
}
}
}

解决方案 »

  1.   

    如果你要读取两个变量或者以上的,或者线程不安全的集合或任何东西,那么读线程不加锁很可能会导致读出的数据之间不匹配,导致运算错误。危险!
      

  2.   

    读写锁,读写互斥,写写互斥,读读不互斥。
    简单来讲,可以并发读取,但是,写入时不能读,不能同时写。
      

  3.   

    可以读,你用程序往记事本里写东西的时候 你可以打开这个文件看内容的,程序就更不用说了能读。 但是读的内容不全可能会有问题