读写锁:就是读者和写者问题,
原则:写者与写者互斥 读者与写者互斥 读者和读者可以并发
public class ReaderAndWriter {
public static void main(String[] args){
ReadAndWriteLockDemo readAndWriteLockDemo = new ReadAndWriteLockDemo();
for(int i =0 ;i<20;i++){
new Thread(new Runnable() {
@Override
public void run() {
readAndWriteLockDemo.read();
}
}).start();
}
//一个线程写、
new Thread(new Runnable() {
@Override
public void run() {
readAndWriteLockDemo.write();
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
readAndWriteLockDemo.read();
}
}).start();
}
}
class ReadAndWriteLockDemo{
private int data = 10;
ReadWriteLock lock = new ReentrantReadWriteLock();
//读取方法
public void read(){
//上锁
lock.readLock().lock();
try{
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"-------"+data);
}finally {
lock.readLock().unlock();
}
}
//写
public void write(){
//上锁
lock.writeLock().lock();
try{
this.data= (int) Math.random()*100;
}finally {
lock.writeLock().unlock();
}
}
}