讀寫鎖是爲了減少讀操作的互斥,提高執行效率。
同步具體表現爲
- 讀讀不互斥
- 讀寫互斥
- 寫寫互斥
以下是一個基本的使用示例:
package multhread;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class ReadWriteLockDemo{
private static ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
//讀鎖
private static Lock readLock = lock.readLock();
//寫鎖
private static Lock writeLock = lock.writeLock();
public static void read() {
try {
readLock.lock();
Thread.sleep(1000);
} catch(Exception e) {
e.printStackTrace();
} finally {
readLock.unlock();
}
}
public static void write() {
try {
writeLock.lock();
Thread.sleep(1000);
} catch(Exception e) {
e.printStackTrace();
} finally {
writeLock.unlock();
}
}
public static void main(String[] args) {
Runnable readThread = new Runnable () {
public void run() {
read();
}
};
Runnable writeThread = new Runnable () {
public void run() {
write();
}
};
//讀操作不互斥,很快就能結束
for (int i = 0; i < 10; i++) {
new Thread(readThread).start();
}
//寫操作互斥,需要逐個線程執行,比較慢
for (int i = 0; i < 10; i++) {
new Thread(writeThread).start();
}
}
}