`

怎样证明HashMap不是线程安全的

 
阅读更多

HashMap用在方法内部并且不传到方法外面可以用HashMap,如果HashMap作为类的成员变量或静态属性

要为HashMap加线程安全锁Collections.synchronizedMap(new HashMap());

import java.util.Collections;

import java.util.HashMap;

import java.util.Map;

 

public class Test {

 

public static final Map<String, String> hashMap = Collections.synchronizedMap(new HashMap<String, String>());

 

public static void main(String[] args) throws InterruptedException {

// 线程一

Thread t1 = new Thread() {

public void run() {

for (int i = 0; i < 25; i++) {

hashMap.put(String.valueOf(i), String.valueOf(i));

}

}

};

 

 

Thread t2 = new Thread() {

public void run() {

for (int j = 25; j < 50; j++) {

hashMap.put(String.valueOf(j), String.valueOf(j));

}

}

};

 

t1.start();

t2.start();

 

// 主线程休眠1秒钟

Thread.currentThread().sleep(1000);

 

System.out.println("size---" + hashMap.size());

for (int l = 0; l < 50; l++) {

System.err.println(String.valueOf(l) + ":" + hashMap.get(String.valueOf(l)));

}

 

}

 

}

 

分享到:
评论

相关推荐

    关于如何解决HashMap线程安全问题的介绍

    HashMap线程不安全的原因主要在于以下几个方面: 1. 多线程环境下并发修改:在多线程环境下,如果多个线程同时对HashMap进行读写操作,可能会导致数据的不一致性和数据丢失。例如,当一个线程正在执行put操作时,另...

    高级程序员必会的HashMap的线程安全问题,适用于0~2年的.7z

    由于HashMap不是线程安全的,一个线程在遍历HashMap的同时,另一个线程对HashMap进行修改(如添加、删除元素),会导致迭代器失效,从而抛出异常。 2. **数据不一致**:由于HashMap的内部实现,如resize操作,可能...

    通过代码证明HashMap是线程不安全的(只用了一个Java文件)

    然而,`HashMap`在并发环境下并非线程安全。这个主题通常涉及到多线程编程和Java集合框架的基础知识。本篇文章将通过分析`HashMap`的源码以及编写一个简单的测试程序来证明这一点。 首先,我们要理解什么是线程安全...

    【并发】为什么HashMap是线程不安全的?

    什么样的类是线程安全的? 1.什么是线程安全性(what) 线程安全定义,最核心是正确性, 正确性:多个线程访问某个类,不管怎么调度这些线程,其代码中不需要额外的同步或协同(synchronized),这个类依然有正确

    servlet线程安全问题

    2. 使用线程安全的对象:使用线程安全的对象,如 Vector、Hashtable 等,而不是 ArrayList、HashMap 等。 3. 使用锁机制:使用锁机制,如 synchronized 关键字,可以锁定某个对象,以避免多个线程同时访问同一个对象...

    hashmap-thread-test:测试 Java HashMap 是否是线程安全的

    1. **非线程安全**:`HashMap`不是线程安全的,因为它没有内置的同步机制来保护并发访问。当多个线程同时修改`HashMap`时,可能产生数据竞争和不确定的行为。 2. **性能**:`HashMap`通过使用散列函数快速查找键值...

    java的hashMap多线程并发情况下扩容产生的死锁问题解决.docx

    此外,引入了ConcurrentHashMap类,这是一个专门为多线程设计的高效容器,其内部使用分段锁策略,可以在并发环境下保证线程安全,避免了类似HashMap扩容引发的死锁问题。 如果你在多线程环境中使用HashMap并遇到...

    HashMap源码分析系列-第四弹:HashMap多线程解决方案.docx

    #### 二、HashMap线程安全问题分析 在多线程环境中,`HashMap`的主要线程安全问题包括但不限于: 1. **链表死循环问题**:在JDK 1.7中,当多个线程同时进行`put`操作时,可能会出现链表死循环的情况,这是一个严重...

    hashmap面试题_hashmap_

    答:HashMap非线程安全,而Hashtable是线程安全的;HashMap允许null键值,Hashtable不允;HashMap迭代器在修改时不会抛出ConcurrentModificationException,而Hashtable会。 5. HashMap的并发问题如何解决? 答:在...

    Java集合多线程安全.docx

    这提供了线程安全的访问,但仍然需要谨慎处理迭代操作,因为迭代器本身不是线程安全的。 例如,对于`ArrayList`的线程安全问题,可以使用`Collections.synchronizedList`来解决,如下所示: ```java List&lt;String&gt; ...

    Java多线程安全集合

    这些是基于非线程安全的集合(如ArrayList、HashMap)通过`Collections.synchronized*`方法转换得到的。例如,`Collections.synchronizedList`和`Collections.synchronizedMap`。同步集合在每个方法上加锁,确保...

    HashMap和HashTable底层原理以及常见面试题

    1. 线程安全:HashMap不是线程安全的,而HashTable是线程安全的。 2. 性能:HashMap的性能比HashTable好,因为HashMap使用数组和链表来存储键值对,而HashTable使用链表来存储键值对。 3. null键:HashMap允许存放...

    Go-Golang无锁线程安全的HashMap为最快的读取访问进行了优化

    本文将深入探讨如何利用Go语言构建一个无锁线程安全的HashMap,特别关注其优化读取访问速度的设计策略。 HashMap是编程中常见的数据结构,用于存储键值对。在多线程环境中,为了保证数据的一致性和正确性,通常需要...

    HashMap和HashTable的区别?但是如果想线程安全有想效率高?

    HashMap和HashTable的区别?但是如果想线程安全有想效率高?

    HashMap类.rar

    5. **线程不安全**:HashMap不是线程安全的,如果在多线程环境中使用,需要外部同步机制,或者使用ConcurrentHashMap。 6. **null键与null值**:HashMap允许键和值为null,但只有一个键可以为null,且该键对应的值...

    HashMap和HashTable的区别和不同

    - **HashMap**: 相较之下,`HashMap`不是一个线程安全的类。如果多个线程并发地访问并修改`HashMap`,则可能导致数据不一致性问题。为了在多线程环境中安全地使用`HashMap`,开发者需要自己负责同步,例如使用`...

    HashMap与HashTable区别

    如果多个线程同时访问一个`HashMap`实例,且至少有一个线程修改了该`HashMap`,则必须通过外部同步来保证线程安全。例如,可以通过将`HashMap`对象包装在一个`Collections.synchronizedMap()`返回的对象中来实现这...

    struts1,struts2,webwork,线程安全问题

    ### Struts1、Struts2、WebWork框架中的线程安全问题分析 #### 一、Struts1与线程安全问题 在Struts1中,每个`Action`类实例是被多个请求重用的,这使得它在多线程环境下存在潜在的线程安全问题。当多个线程同时...

    05.HashMap相关面试题

    ConcurrentHashMap 是 Java 中的一个线程安全的 HashMap 实现,它使用了分段锁(Segment)来实现高效的并发访问。 * ConcurrentHashMap 使用多个锁来实现并发访问,每个锁对应一个 segment。 * 当多个线程访问同一...

    Java的线程安全与不安全集合.docx

    4. `HashSet`: 基于`HashMap`实现的无序集合,因此它也不是线程安全的。 5. `TreeMap`和`TreeSet`: 基于红黑树的数据结构,它们提供了有序的遍历,但同样不保证线程安全。 6. `StringBuilder`: 在字符串构建时,`...

Global site tag (gtag.js) - Google Analytics