ReadWriteLock读写锁
ReadWriteLock是JDK5中提供的读写分离锁。该锁可以有效地帮助减少锁竞争,提升系统性能。特点是:
- 读-读不互斥:读读之间不会阻塞
- 读-写互斥:读阻塞写,写也会阻塞读
- 写-写互斥:写写会阻塞
使用案例: `
import java.util.Random;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class ReadWriteLockDemo {
private static Lock lock=new ReentrantLock();
private static ReentrantReadWriteLock readWriteLock=new ReentrantReadWriteLock();
private static Lock readLock=readWriteLock.readLock();
private static Lock writeLock=readWriteLock.writeLock();
private int value;
public Object 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();
}
}
public static void main(String[] args) {
final ReadWriteLockDemo demo=new ReadWriteLockDemo();
Runnable readRunnable=new Runnable() {
@Override
public void run() {
try{
demo.handleRead(readLock);
}catch (InterruptedException e){
e.printStackTrace();
}
}
};
Runnable writeRunnable =new Runnable() {
@Override
public void run() {
try{
demo.handleWrite(writeLock,new Random().nextInt());
}catch (InterruptedException e){
e.printStackTrace();
}
}
};
for (int i=0;i<18;i++){
new Thread(readRunnable).start();
}
for (int i=18;i<20;i++){
new Thread(writeRunnable).start();
}
}
}
`