package com.thunisoft.lambdaDemo.lambda.service;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
/**
- Description
- @Author blindore
- @Date Created in 2021-6-30 10:43
*/
public class TestReadWriterLock {
public static void main(String[] args) {
int num = (int) (Math.random()*100);
ReadWriterLockDemo rw = new ReadWriterLockDemo();
new Thread(() -> {rw.set(num);}, “write:”).start();
for (int i = 0; i < 100; i++) {
new Thread(() -> {rw.get();}).start();
}
}
}
class ReadWriterLockDemo {
private int number;
private ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
//读(可以多个线程同时操作)
public void get() {
readWriteLock.readLock().lock();//上锁
try {
System.out.println(Thread.currentThread().getName() + ":" + number);
} finally {
readWriteLock.readLock().unlock();//释放锁
}
}
//写(一次只能有一个线程操作)
public void set(int number) {
readWriteLock.writeLock().lock();
try {
System.out.println(Thread.currentThread().getName());
this.number = number;
} finally {
readWriteLock.writeLock().unlock();
}
}
}