`
onlyor
  • 浏览: 377625 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

java hashmap 非线程安全访问 导致CPU过高 或 线程挂起

 
阅读更多

当利用非线程安全的方式访问HashMap时,会导致CPU过高 或 过多线程挂起

kill -3 pid

java -jar jca457.jar 

打开: javacore文件javacore.20160920.085924.26934.0004.txt

 

 

堆栈表现不同

at java.util.HashMap.findNonNullKeyEntry() 

at java.util.HashMap.getEntry() 

at java.util.HashMap.get() 

at com.xyz.methodABC() 

... 

or 

at java.util.HashMap.findNonNullKeyEntry() 

at java.util.HashMap.putImpl() 

at java.util.HashMap.put() 

at com.xyz.methodABC() 

 

请求线程可分为以下几种状态: 

死锁,Deadlock(重点关注

执行中,Runnable(重点关注)    

等待资源,Waiting on condition(重点关注)  

等待监控器检查资源,Waiting on monitor 

暂停,Suspended 

对象等待中,Object.wait() 

阻塞,Blocked(重点关注)   

停止,Parked

  • 大小: 80.1 KB
分享到:
评论

相关推荐

    Java常见的线程安全的类.docx

    它们使用ReentrantLock进行显式同步,允许线程在等待队列空间或元素时挂起,提高了并发性能。 4. CopyOnWriteArrayList和CopyOnWriteArraySet:这两个类在修改时不会立即修改原有数组,而是创建一个新的数组副本,...

    疫苗:Java HashMap的死循环

    这是因为HashMap的resize操作可能会导致所有线程挂起,从而引发死循环。下面我们来分析resize操作的源代码: void resize(int newCapacity) { Entry[] oldTable = table; int oldCapacity = oldTable.length; .....

    15个顶级JAVA多线程面试题及回答[文].pdf

    对于“如何处理Java中的阻塞方法”,面试官可能会问及如何避免阻塞操作导致的线程挂起,以及如何使用中断机制来控制阻塞方法的结束。 面试时还可能需要解释“什么是线程转储(Thread Dump)”以及如何在不同的操作...

    Java多线程同步[文].pdf

    为了模拟并发访问,`Runner`的`run`方法在操作ATM之前调用了`Thread.sleep`方法,这使得执行线程会暂时挂起一段时间,从而可能引起线程切换。 对于Java并发,还有一个重要的参考资料,即Java并发编程社区(JCP)...

    我的java笔记

    阻塞状态是线程因某种原因被挂起,如等待I/O完成或锁的释放;终止状态是线程执行完毕或被强制停止。 ArrayList 和 Vector 都是基于数组实现的列表,适合按索引访问,但插入和删除操作相对较慢,因为涉及到数组元素...

    面试知识点总结--java基础类库.pdf

    Java 中的线程有四种状态分别是:运行、就绪、挂起、结束。 * 运行状态:线程正在执行任务 * 就绪状态:线程准备好执行任务,但还没有开始执行 * 挂起状态:线程暂停执行,等待其他线程的通知 * 结束状态:线程执行...

    java面试精选72题

    其中,阻塞态可以细分为等待态、同步阻塞态和挂起态等。 以上内容不仅涵盖了Java基础知识,还有多线程编程、集合框架、数据库操作(JDBC)、多态性等重要的知识点,这些知识点对于Java中级工程师来说是必备的技能,...

    15个顶级Java多线程面试题及回答.docx

    ### 15个顶级Java多线程面试题详解 #### 题目一:线程执行顺序控制 **题目:** 如何确保线程T2在T1执行完毕后执行,而T3在T2执行完毕后执行? **解答:** 在Java中可以通过`Thread.join()`方法来实现线程之间的顺序...

    关于《Java那么健壮,怎么会挂?》的1000条回复Jav

    9. **性能监控**:使用JConsole、VisualVM等工具监控JVM的运行状态,可以及时发现潜在问题,如CPU过高、内存溢出等。 10. **日志与调试**:良好的日志记录习惯可以帮助定位问题。学会使用断点、步进、查看堆栈信息...

    java笔试题目以及部分答案

    sleep() 方法将线程挂起一段时间,而 wait() 方法将线程挂起,直到其他线程调用 notify() 或 notifyAll() 方法。 13. Java 有没有 goto? Java 语言中没有 goto 语句,但是可以使用 break、continue 和 return ...

    毕业生java基础面试题大全

    - **线程状态** 包括:新建、就绪、运行、阻塞(挂起)、终止。状态之间有特定转换规则。 4. **运行时异常与一般异常** - **运行时异常** 是程序运行中常见的错误,如空指针异常,无需显式捕获。 - **一般异常**...

    后端开发基础知识整理JAVA、JVM、操作系统、网络、设计模式、mysql、redis、多线程、spring、springboo

    - **DMA工作方式**:直接内存访问,绕过CPU进行数据传输。 - **TCP/IP网络模型**:应用层、传输层、网络层、数据链路层、物理层。 #### 4. 网络 - **HTTP状态码**:200成功、404未找到等。 - **HTTP/1.1、HTTP/2、...

    java精通程度应该会什么

    - **阻塞/非阻塞**: 阻塞I/O在等待时会挂起线程,而非阻塞I/O则不会。 - **同步/异步**: 同步I/O是指I/O操作完成之前线程会被阻塞,而异步I/O则是非阻塞的。 - **四种模型**: 阻塞I/O、非阻塞I/O、多路复用I/O...

    超级有影响力霸气的Java面试题大全文档

    HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。 HashMap允许将null作为一个entry的key或者...

    2020年最新Java核心知识点整理.pdf

    - **阻塞IO模型**:直到数据准备好时才执行,否则线程挂起。 - **非阻塞IO模型**:线程不断轮询以检查数据是否准备好。 - **多路复用IO模型**:单个线程可以监视多个文件描述符。 - **信号驱动IO模型**:通过信号...

    Java.Bug模式详解

    4. **并发编程错误**:例如,不正确的使用wait()、notify()和notifyAll()可能导致程序挂起。理解并发容器如ConcurrentHashMap、CopyOnWriteArrayList的工作原理,以及如何使用CountDownLatch、CyclicBarrier等工具,...

    java面试题

    - **挂起**:线程被暂停,可能因等待资源或信号而停止。 - **结束**:线程执行完毕。 9. **JSP指令** - `<%@page>`:用于设置页面属性,如语言、编码、是否启用session、缓冲区大小等。 以上知识点只是Java面试...

    Java装逼指南.pdf

    - **Unsafe**类提供了低级别的操作,如内存访问、线程挂起、原子变量操作等。 - **限制**:直接操作硬件资源,不当使用可能导致安全性问题。 - **API**:包括`allocateMemory`、`freeMemory`、`getAndAddInt`等...

Global site tag (gtag.js) - Google Analytics