java多线程ReadWriteLock读写锁

Posted 500年

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java多线程ReadWriteLock读写锁相关的知识,希望对你有一定的参考价值。

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阻塞队列

以上是关于java多线程ReadWriteLock读写锁的主要内容,如果未能解决你的问题,请参考以下文章

Java——多线程高并发系列之ReadWriteLock读写锁

Java——多线程高并发系列之ReadWriteLock读写锁

java多线程---读写锁ReadWriteLock

Java 多线程 ReadWriteLock

(多线程与并发)面试题03--java中读写锁ReadWriteLock

(多线程与并发)面试题03--java中读写锁ReadWriteLock