本文为看视频学习笔记,若有错误,请指正,谢谢!
之前,在涉及到线程安全问题时,一般都会给选择直接加锁,保证一次只有一个线程能够访问到共享变量,但是这会一定程度上导致性能问题,因此今天要来介绍一下读写锁
读写锁维护了一对锁,一个用于读操做的读锁,另一个是用于写操作的写锁。读锁可以被多个线程并发的持有,在没有写操作的时候;写锁只能被一个线程持有。
应用场景:写写/读写场景下,锁需要“互斥”;
读读场景下,锁不需要“互斥”
举个例子
public class TestReadWriteLock {
public static void main(String[] args){
ReadWriteLockDemo readWriteLockDemo = new ReadWriteLockDemo();
new Thread(new Runnable() {
@Override
public void run() {
readWriteLockDemo.write(100);
}
},"写线程").start();
for (int i = 0; i <100 ; i++) {
new Thread(new Runnable() {
@Override
public void run() {
readWriteLockDemo.read();
}
}).start();
}
}
}
class ReadWriteLockDemo{
private int number = 0;
private ReadWriteLock lock = new ReentrantReadWriteLock();
public void read(){
lock.readLock().lock();
try {
System.out.println(Thread.currentThread().getName() + ":" + number);
}finally {
lock.readLock().unlock();
}
}
public void write(int number){
lock.writeLock().lock();
try {
System.out.println(Thread.currentThread().getName()+"is writing!");
this.number = number;
}finally {
lock.writeLock().unlock();
}
}
}
运行结果:
