ReadWriteLock读写锁
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class ReadWriteLockDemo {
public static void main(String[] args) {
ReadWriteLockDemo a = new ReadWriteLockDemo();
for (int i = 1; i <= 6; i++) {
final int temp = i;
new Thread(() -> {
a.put(temp + "", temp + "");
}, String.valueOf(i)).start();
}
for (int i = 1; i <= 6; i++) {
final int temp = i;
new Thread(() -> {
a.get(temp + "");
}, String.valueOf(i)).start();
}
}
private volatile Map<String, String> map = new HashMap<String, String>();
ReadWriteLock readWriteLock=new ReentrantReadWriteLock();
public void put(String key, String value) {
readWriteLock.writeLock().lock();
System.out.println(Thread.currentThread().getName() + "写入");
map.put(key, value);
System.out.println(Thread.currentThread().getName() + "写入完成");
readWriteLock.writeLock().unlock();
}
public String get(String key) {
readWriteLock.readLock().lock();
System.out.println(Thread.currentThread().getName() + "读取");
String string = map.get(key);
System.out.println(Thread.currentThread().getName() + "读取完成");
readWriteLock.readLock().unlock();
return string;
}
}
运行结果
1写入
1写入完成
3写入
3写入完成
2写入
2写入完成
4写入
4写入完成
5写入
5写入完成
6写入
6写入完成
4读取
4读取完成
6读取
2读取
5读取
5读取完成
1读取
2读取完成
3读取
6读取完成
3读取完成
1读取完成
特别鸣谢:狂神说Java老师的无私奉献
.
.
.
上一篇 java多线程(三) Semaphore 信号量 限流线程
下一篇 java多线程(五)ArrayBlockingQueue阻塞队列