ReadWriteLock:读写锁
如果可能发生线程安全问题,就直接上锁,虽然可以避免线程安全问题,但效率较低。
我们可以将其按读与写进行分离,每一次只能有一个线程来进行写数据,但可以有多个线程进行读数据,写与写互斥、写与读互斥,但是读与读不需要互斥。
读写锁互斥原则
写—写 需要互斥
读—写 需要互斥
读—读 不需要互斥
读写锁实例
public class ReadWriteLockDemo{
private int number=0;
private ReadWriteLock lock=new ReentrantReadWriteLock();
//读数据
public void get(){
lock.readLock().lock();//上锁
System.out.println(Thread.currentThread().getName()+" : "+number);
lock.readLock().unlock();//释放锁
}
//写数据
public void set(int number){
lock.writeLock().lock();
System.out.println(Thread.currentThread().getName());
this.number=number;
lock.writeLock().lock();
}
}