利用ReentrantReadWriteLock类实现读写演示
package jess.day07;
import java.util.Random;
import java.util.concurrent.locks.ReentrantReadWriteLock;
/**
* @author Jess
* @date 2021/9/26
*/
public class ReadWriteLockTest {
// 创建读写锁lock
public static ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
// 记录写的内容
public static int COUNT = 1;
public static void main(String[] args) {
// 函数式接口构建内部类
Runnable read = () -> {
// 获得读锁
ReentrantReadWriteLock.ReadLock readLock = lock.readLock();
// 启动读锁
readLock.lock();
try {
// 读取数据
System.out.println("正在读数据" + COUNT);
} finally {
// 释放读锁
readLock.unlock();
}
};
Runnable write = new Runnable() {
@Override
public void run() {
// 获取写锁
ReentrantReadWriteLock.WriteLock writeLock = lock.writeLock();
// 启动写锁
writeLock.lock();
try {
// sleep 两秒
Thread.sleep(2000);
System.out.println("正在写数据" + COUNT++);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
// 关闭写锁
writeLock.unlock();
}
}
};
for (int i = 0; i < 100; i++) {
// 获取随机数 【0-100)
Random random = new Random();
int flag = random.nextInt(100);
if (flag > 20) {
// 新建并启动读线程
new Thread(read, "read").start();
} else {
// 新建并启动写线程
new Thread(write, "write").start();
}
}
}
}