应用说明
- 读可以多个线程,写只能有一个线程。
- 写写 or 读写:互斥
读读:不互斥
- 比普通的锁读效率高
演示
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class 读写锁 {
public static void main(String[] args) {
ReadWriteLockTest rwlt = new ReadWriteLockTest();
for (int i = 0; i < 100; i++) {
new Thread(rwlt::getNum, "R" + i).start();
}
new Thread(() -> {
for (int i = 0; i < 1000; i++) {
rwlt.setNum(i);
}
}, "W").start();
}
}
class ReadWriteLockTest {
private int num;
ReadWriteLock rwl = new ReentrantReadWriteLock();
Lock readLock = rwl.readLock();
Lock wl = rwl.writeLock();
public void getNum() {
readLock.lock();
try {
System.out.println(Thread.currentThread().getName() + " " + num);
} finally {
readLock.unlock();
}
}
public void setNum(int num) {
wl.lock();
try {
this.num = num;
} finally {
wl.unlock();
}
}
}