package org.meng.juc;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
/**
* @ClassName: TestReadWriteLock
* @Description: 读写锁:写写/读写 需要互斥;读读 不需要互斥
* @Author: MengMeng
* @Date: 2021/1/17 2:20 下午
* @Version: v1.0
*/
public class TestReadWriteLock {
public static void main(String[] args) {
ReadWriteLockDemo rw = new ReadWriteLockDemo();
new Thread(() -> {
rw.set((int) (Math.random()*10));
},"write:").start();
for (int i = 0; i < 100; i++) {
new Thread(() -> {
rw.get();
},"read:").start();
}
}
}
class ReadWriteLockDemo {
private int num = 0;
private ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
// 读
public void get() {
readWriteLock.readLock().lock();
try {
System.out.println(Thread.currentThread().getName()+":"+num);
}finally {
readWriteLock.readLock().unlock();
}
}
// 写
public void set(int num) {
readWriteLock.writeLock().lock();
try {
System.out.println(Thread.currentThread().getName()+":"+num);
this.num = num;
}finally {
readWriteLock.writeLock().unlock();
}
}
}