Juc包里面的读写锁
- 读锁:读取资源的时候加锁,但是其他线程读取的时候不用等到释放锁,可以重复加锁并读取
- 写锁:写资源的时候加锁,其他线程想写必须等待释放。
- 读锁不是独占锁,写锁是独占锁。
死锁
- 个人理解:比如A拿到B的资源,然后等B拿到A所需的资源,然后互相等待彼此释放资源,所以无线等待。形成死锁。
读写锁基本使用
- 推荐使用juc包里面的重用锁ReentrantReadWriteLock()
package com.cd.thread;
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class RWthread {
ReentrantReadWriteLock rw = new ReentrantReadWriteLock();
public static void main(String[] args) {
RWthread rWthread = new RWthread();
new Thread(()->{
rWthread.readMethod(Thread.currentThread());
rWthread.writeMethod(Thread.currentThread());
},"t1").start();
new Thread(()->{
rWthread.readMethod(Thread.currentThread());
rWthread.writeMethod(Thread.currentThread());
},"t2").start();
}
private void readMethod(Thread thread){
rw.readLock().lock();
try {
System.out.println("这里是读操作。。。。。。。。。");
for (int i = 0; i <100 ; i++) {
System.out.println(thread.getName()+ " "+i+"正在读");
}
}finally {
rw.readLock().unlock();
}
}
private void writeMethod(Thread thread){
rw.writeLock().lock();
try {
System.out.println("这里是写操作。。。。。。。。。");
for (int i = 0; i <100 ; i++) {
System.out.println(thread.getName()+" "+ i+"正在写");
}
}finally {
rw.writeLock().unlock();
}
}
}