ReentrantReadWriteLock读写锁
2019-05-31 本文已影响0人
12点前睡觉hhh
读写锁允许同一时刻被多个线程访问,但是在写线程访问时,所有的读线程和其他的写线程都会被阻塞 。比如线程A1,A2,A3进行写操作,线程B1,B2,B3进行读操作,如果使用重入锁或者内部锁,所有读之间,读写之间,写写之间都是串行操作,而使用读写锁的话,允许多个线程同时读。
读写锁的使用:
public class ReadWriteLockDemo {
private static ReentrantReadWriteLock readWriteLock=new ReentrantReadWriteLock();
private static Lock readLock=readWriteLock.readLock();
private static Lock writeLock=readWriteLock.writeLock();
private int value;
public int handleRead(Lock lock) throws InterruptedException {
try {
lock.lock();
Thread.sleep(1000);//模拟读操作,将其耗时放大
return value;
}finally {
lock.unlock();
}
}
public void handleWrite(Lock lock,int index) throws InterruptedException {
try{
lock.lock();
Thread.sleep(1000);
value=index;
}finally {
lock.unlock();
}
}
}