package com.student;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class ReadWriteLockDemo {
private String name = "name";
private String id = "id";
private ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
List readList = new ArrayList();
List writeList = new ArrayList();
public void getName(){
readWriteLock.readLock().lock();
try {
readList.add(Thread.currentThread().getId()+":"+id);
readList.add(Thread.currentThread().getName()+":"+name);
System.out.println(readList);
}finally {
readWriteLock.readLock().unlock();
}
}
public void setName(String name){
readWriteLock.writeLock().lock();
try {
this.name = name;
writeList.add(Thread.currentThread().getId()+":"+id);
writeList.add(Thread.currentThread().getName()+":"+name);
System.out.println(readList);
}finally {
readWriteLock.writeLock().unlock();
}
}
}
package com.student;
public class test {
public static void main(String[] args) {
ReadWriteLockDemo readWriteLockDemo = new ReadWriteLockDemo();
for (int i = 0;i<100;i++){
new Thread(new Runnable() {
@Override
public void run() {
readWriteLockDemo.getName();
}
}).start();
}
for (int i=0;i<100;i++){
new Thread(new Runnable() {
@Override
public void run() {
readWriteLockDemo.setName(String.valueOf(Math.random()*101));
}
},"write").start();
}
}
}