hashmap线程不安全的代码例子
时间: 2023-10-19 19:18:56 浏览: 113
当多个线程同时访问HashMap时,可能会导致数据不一致的情况,例如:
```java
Map<String, Integer> map = new HashMap<>();
// 线程1添加数据
new Thread(() -> {
for (int i = 0; i < 100000; i++) {
map.put("key" + i, i);
}
}).start();
// 线程2读取数据
new Thread(() -> {
for (int i = 0; i < 100000; i++) {
if (map.containsKey("key" + i)) {
Integer value = map.get("key" + i);
System.out.println(value);
}
}
}).start();
```
在上面的代码中,当线程1执行put操作时,可能会与线程2同时执行get操作,导致读取到的数据不一致。可以使用ConcurrentHashMap来保证线程安全。
相关问题
hashmap代码例子
下面是一个简单的 Java 实现的 HashMap 代码例子:
```java
import java.util.HashMap;
public class MyHashMap {
public static void main(String[] args) {
// 创建一个 HashMap 对象
HashMap<String, Integer> hashMap = new HashMap<>();
// 添加键值对
hashMap.put("apple", 1);
hashMap.put("banana", 2);
hashMap.put("orange", 3);
// 获取值
System.out.println(hashMap.get("apple"));
System.out.println(hashMap.get("banana"));
System.out.println(hashMap.get("orange"));
// 删除键值对
hashMap.remove("banana");
// 遍历 HashMap
for (String key : hashMap.keySet()) {
System.out.println(key + ": " + hashMap.get(key));
}
}
}
```
输出结果:
```
1
2
3
apple: 1
orange: 3
```
注意,HashMap 是一个非线程安全的类,如果在多线程环境下使用,需要进行同步处理。
阅读全文