概述
2021版Java多线程教程
全集
2021版Java多线程教程
代码
RWDictionary.class
package main;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
/**
* 高并发容器
*/
public class RWDictionary {
/**
* key-value容器
*/
private final Map<String, Object> m = new HashMap<>();
/**
* 读写锁
*/
private final ReadWriteLock rwl = new ReentrantReadWriteLock(true);
/**
* 读锁
*/
private final Lock r = rwl.readLock();
/**
* 写锁
*/
private final Lock w = rwl.writeLock();
/**
* 返回键对应的值。
*
* @param key 键。
* @return 键对应的值。
*/
public Object get(String key) {
// 获取读锁
r.lock();
try {
// 返回键对应的值
return m.get(key);
} finally {
// 释放读锁
r.unlock();
}
}
/**
* 返回所有的键。
*
* @return 所有的键。
*/
public String[] allKeys() {
// 获取读锁
r.lock();
try {
// 返回所有的键
return m.keySet().toArray(new String[0]);
} finally {
// 释放读锁
r.unlock();
}
}
/**
* 添加键和值,并返回数据。
*
* @param key 键。
* @param value 值。
* @return 返回添加的数据。
*/
public Object put(String key, Object value) {
// 获取写锁
w.lock();
try {
// 添加数据
return m.put(key, value);
} finally {
// 释放写锁
w.unlock();
}
}
/**
* 清空容器。
*/
public void clear() {
// 获取写锁
w.lock();
try {
// 清空容器
m.clear();
} finally {
// 释放写锁
w.unlock();
}
}
}
WriteTask.class
package main;
public class WriteTask implements Runnable {
/**
* 高并发容器
*/
private RWDictionary dictionary;
public WriteTask(RWDictionary dictionary) {
this.dictionary = dictionary;
}
@Override
public void run() {
// 计数器
int i = 0;
// 无限写入
while (true) {
try {
// 使当前线程休眠1秒钟
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 获取当前线程名称
String name = Thread.currentThread().getName();
// 存储数据
dictionary.put("人人都是程序员", name + "---" + i++);
}
}
}
ReadTask.class
package main;
public class ReadTask implements Runnable {
/**
* 高并发容器
*/
private RWDictionary dictionary;
public ReadTask(RWDictionary dictionary) {
this.dictionary = dictionary;
}
@Override
public void run() {
// 无限读取
while (true) {
try {
// 使当前线程休眠1秒钟
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 获取所有的key
String[] keys = dictionary.allKeys();
// 遍历所有的key
for (String key : keys) {
Object value = dictionary.get(key);
System.out.println(key + ":" + value);
}
}
}
}
Main.class
package main;
public class Main {
public static void main(String[] args) {
// 创建高并发容器
RWDictionary dictionary = new RWDictionary();
// 创建读、写任务
WriteTask writeTask = new WriteTask(dictionary);
ReadTask readTask = new ReadTask(dictionary);
// 创建读、写线程
Thread writeThread0 = new Thread(writeTask);
Thread writeThread1 = new Thread(writeTask);
Thread writeThread2 = new Thread(writeTask);
Thread readThread0 = new Thread(readTask);
Thread readThread1 = new Thread(readTask);
Thread readThread2 = new Thread(readTask);
// 启动线程
writeThread0.start();
writeThread1.start();
writeThread2.start();
readThread0.start();
readThread1.start();
readThread2.start();
}
}
最后
以上就是冷酷万宝路为你收集整理的2021版Java多线程教程29:读写锁实战高并发容器全集代码的全部内容,希望文章能够帮你解决2021版Java多线程教程29:读写锁实战高并发容器全集代码所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复