public class Test {
public static void main(String[] args) throws InterruptedException {
ReadWriteLockEntity rw = new ReadWriteLockEntity();
new Thread(() -> {rw.writeObj("你好");}, "写线程").start();
Thread.sleep(100);
for(int i=1; i<=100; i++) {
new Thread(() -> {rw.readObj();}, String.valueOf(i)).start();
}
}
}
class ReadWriteLockEntity {
private Object obj;
private ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
public void writeObj(Object obj) {
lock.writeLock().lock();
try {
this.obj = obj;
System.out.println(Thread.currentThread().getName() + "写入" + obj.toString());
} finally {
lock.writeLock().unlock();
}
}
public Object readObj() {
lock.readLock().lock();
try {
System.out.println("第" + Thread.currentThread().getName() +"线程读出" + obj.toString());
} finally {
lock.readLock().unlock();
}
return obj;
}
}
输出:
写线程写入你好
第2线程读出你好
第3线程读出你好
第1线程读出你好
第4线程读出你好
第5线程读出你好
第6线程读出你好
第7线程读出你好
······