多个线程对hashmap进行put操作的异常

Exception in thread "Thread-0" java.lang.ClassCastException: java.util.HashMap$Node cannot be cast to java.util.HashMap$TreeNode
at java.util.HashMap$TreeNode.moveRootToFront(HashMap.java:1832)
at java.util.HashMap$TreeNode.treeify(HashMap.java:1949)
at java.util.HashMap$TreeNode.split(HashMap.java:2175)
at java.util.HashMap.resize(HashMap.java:714)
at java.util.HashMap.putVal(HashMap.java:663)
at java.util.HashMap.put(HashMap.java:612)
at com.stono.thread3.page313.Thread1A.run(Thread1A.java:17)

源码:

package com.stono.thread3.page313;

import java.util.HashMap;

public class MyService1 {
public HashMap<String, String> map = new HashMap<>();
}
package com.stono.thread3.page313; import com.stono.thread3.CusPrint; public class Thread1A extends Thread { private MyService1 service1; public Thread1A(MyService1 service1) {
super();
this.service1 = service1;
} @Override
public void run() {
for(int i=0;i<50000;i++) {
service1.map.put("ThreadA"+(i+1), "ThreadA"+(i+1));
CusPrint.print("ThreadA"+(i+1));
}
}
}
package com.stono.thread3.page313; import com.stono.thread3.CusPrint; public class Thread1B extends Thread { private MyService1 service1; public Thread1B(MyService1 service1) {
super();
this.service1 = service1;
} @Override
public void run() {
for(int i=0;i<50000;i++) {
service1.map.put("ThreadB"+(i+1), "ThreadB"+(i+1));
CusPrint.print("ThreadB"+(i+1));
}
}
}
package com.stono.thread3.page313; public class Test1_2 { public static void main(String[] args) {
MyService1 service1 = new MyService1();
Thread1A a = new Thread1A(service1);
Thread1B b = new Thread1B(service1);
a.start();
b.start();
} }

多个线程对hashmap进行put操作的异常的更多相关文章

  1. Swing中耗时任务需要另起新线程,这个新线程中更新GUI的操作仍需由EDT来做(转)

    最近调试程序时发现,点击某个界面时会出现卡死的情况,出现的频率还是比较频繁的. 再次出现卡死的情况后,利用jvisualvm查看线程的运行情况,dump操作之后发现线程间出现了死锁:Found one ...

  2. 面试连环炮系列(七):HashMap的put操作做了什么

    HashMap的put操作做了什么? HashMap的是由数组和链表构成的,JDK7之后加入了红黑树处理哈希冲突.put操作的步骤是这样的: 根据key值计算出哈希值作为数组下标.如果数组的这个位置是 ...

  3. python 虚拟机是单线程;当线程执行I/O密集型操作是,ce

    python 虚拟机是单线程:当线程执行I/O密集型操作是 单核CPU,不存在“并行”,与语言无关:每个线程运行中,其他线程等待该线程让步 粗粒度的并行 靠 软件,细---硬---

  4. 深入浅出 Java Concurrency (36): 线程池 part 9 并发操作异常体系[转]

    并发包引入的工具类很多方法都会抛出一定的异常,这些异常描述了任务在线程池中执行时发生的例外情况,而通常这些例外需要应用程序进行捕捉和处理. 例如在Future接口中有如下一个API: java.uti ...

  5. HashMap源码和并发异常问题分析

    要点源码分析 HashMap允许键值对为null:HashTable则不允许,会报空指针异常: HashMap<String, String> map= new HashMap<&g ...

  6. 捕获Java线程池执行任务抛出的异常

    捕获Java线程池执行任务抛出的异常Java中线程执行的任务接口java.lang.Runnable 要求不抛出Checked异常, public interface Runnable { publi ...

  7. STL容器能力一览表和各个容器操作函数异常保证

    STL容器能力一览表 Vector Deque List Set Multiset map Multimap 典型内部 结构 dynamic array Array of arrays Doubly ...

  8. 并发HashMap的put操作引起死循环

    今天研读Java并发容器和框架时,看到为什么要使用ConcurrentHashMap时,其中有一个原因是:线程不安全的HashMap, HashMap在并发执行put操作时会引起死循环,是因为多线程会 ...

  9. java线程中的notifyAll唤醒操作

    注意: java中的notifyAll和notify都是唤醒线程的操作,notify只会唤醒等待池中的某一个线程,但是不确定是哪一个线程,notifyAll是针对指定对象里面的所有线程执行唤醒操作,指 ...

随机推荐

  1. SpringBoot-redis-session

    配置pom <parent> <groupId>org.springframework.boot</groupId> <artifactId>sprin ...

  2. nginx connect failed (110- Connection timed out) 问题排查

    首先排查 ping 下 nginx 与代理服务是否ping 的通,带端口的,telnet 下端口号是否是通的,本次遇到问题为 telnet 发现有台服务器不通,原因是端口未开放

  3. CF817C Really Big Numbers

    思路: 二分. 实现: #include <iostream> #include <cstdio> using namespace std; typedef long long ...

  4. python语言真正的奥义所在--对接32单片机

    2018-02-2720:51:24 今天晚上注定我要玩一夜这个东西,太爽了,给力! 烧写固件成功, http://blog.csdn.net/Lingdongtianxia/article/deta ...

  5. Android 仿微信调用第三方应用导航(百度,高德、腾讯)

    实现目标 先来一张微信功能截图看看要做什么  其实就是有一个目的地,点击目的地的时候弹出可选择的应用进行导航. 大脑动一下,要实现这个功能应该大体分成两步: 底部弹出可选的地图菜单进行展示 点击具体菜 ...

  6. EF CodeFirst 不得不说的Where与OrderBy

    先来聊上5毛钱的“排序” Code: using (ApplicationDbContext Db=new ApplicationDbContext()) { var res = Db.Threes. ...

  7. iOS中ARC和非ARC混用

    如果在使用第三方类库的时候,我们可能会遇到一些内存管理的问题   那么如何在一个工程中实现ARC和非ARC混用呢,例如你创建一个ARC的工程,但是你引用的第三方类库是非ARC管理内存的   首先点击工 ...

  8. tp登陆注册(转)

    登录时,更新用户数据,登录ip和登录时间,以及登录次数+1,此实现方便不知是否合适,待验证.源码地址:https://github.com/grh0812/thinkphp-login-registe ...

  9. Windows sever 2003 IIS6.0 搭建DVWA

    DVWA 环境: Windows Sever 2003 IIS 6.0+MYSQL+PHP5.4+FASFCGI 详细教程: http://files.cnblogs.com/files/yyx001 ...

  10. C/C++ char*、char[]

    一.本质区别 char* s是一个保存字符串首地址的指针变量,char a[]是许多连续的内存单元,单元中的元素为char类型.之所以用char *能达到char []的效果,还是字符串的本质,即给你 ...