读写锁---
在这里插入代码片===
package com.bird.共享锁和排它锁;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class ReadWriteLock {
private static ReentrantReadWriteLock reentrantReadWriteLock = new ReentrantReadWriteLock();
private static ReentrantReadWriteLock.ReadLock readLock = reentrantReadWriteLock.readLock();
private static ReentrantReadWriteLock.WriteLock writeLock = reentrantReadWriteLock.writeLock();
public static void main(String[] args) {
new Thread(ReadWriteLock::read).start();
new Thread(ReadWriteLock::read).start();
new Thread(ReadWriteLock::write).start();
new Thread(ReadWriteLock::write).start();
}
private static void read() {
readLock.lock();
try {
System.out.println(Thread.currentThread().getName() + " 得到了读锁,正在读取数据....");
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
} finally {
System.out.println(Thread.currentThread().getName() + " 释放了读锁!!!");
readLock.unlock();
}
}
private static void write() {
writeLock.lock();
try {
System.out.println(Thread.currentThread().getName() + "得到了写锁,正在写入!!!");
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
} finally {
System.out.println(Thread.currentThread().getName() + " 释放了写锁!!!");
writeLock.unlock();
}
}
}