JAVA Thread Dump分析线程竞争

简介: JAVA Thread Dump分析线程竞争

Thread Dump分析线程竞争

并不是用了线程池、多线程,就可以带来更高的性能的,总有些地方需要一个锁进行同步。

JAVA 中的synchronized就是一种悲观锁

本次分析Thread Dump发现性能问题是一个OOM问题中的消费速率过慢的问题。

截图

  • 对于线程池pool-20来说,一共12个线程,一个处于running,一个waiting,还有10个处于blocking的状态,基本就是同步进行了,无意义的多线程了。
  • 发现#getData方法是synchronized修饰的,从类名也可以看出来这是一个手写的本地缓存,存在ConcurrentHashMap中,并将其更新以文件的方式刷入磁盘。

具体代码就不能贴了,所以这里只是记录思路!!!

  1. 对于get方法,都是直接从ConcurrentHashMap中取的,它本身就用了CAS来确保线程安全,没有必要用synchronized进行修饰。
  2. 对于set方法,一步是修改入ConcurrentHashMap,一步是刷新文件。他同样是用了synchronized进行修饰。毫无疑问,又没用上ConcurrentHashMap的分段乐观锁的性能优势,又会全部阻塞。
  3. 对于2中提到的刷文件,其实可以交予一个ScheduledThreadPoolExecutor创建的一个定时线程来进行刷新缓存,当一致性要求没那么高的时候,即使宕机或者应用dump等等都不会带来多少问题。
  4. 本地缓存有guava等开源框架,有空还是要学习一下源码的。
目录
相关文章
|
10天前
|
设计模式 消息中间件 安全
【JUC】(3)常见的设计模式概念分析与多把锁使用场景!!理解线程状态转换条件!带你深入JUC!!文章全程笔记干货!!
JUC专栏第三篇,带你继续深入JUC! 本篇文章涵盖内容:保护性暂停、生产者与消费者、Park&unPark、线程转换条件、多把锁情况分析、可重入锁、顺序控制 笔记共享!!文章全程干货!
58 1
|
10天前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
55 1
|
10天前
|
Java Go 开发工具
【Java】(9)抽象类、接口、内部的运用与作用分析,枚举类型的使用
抽象类必须使用abstract修饰符来修饰,抽象方法也必须使用abstract修饰符来修饰,抽象方法不能有方法体。抽象类不能被实例化,无法使用new关键字来调用抽象类的构造器创建抽象类的实例。抽象类可以包含成员变量、方法(普通方法和抽象方法都可以)、构造器、初始化块、内部类(接 口、枚举)5种成分。抽象类的构造器不能用于创建实例,主要是用于被其子类调用。抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类abstract static不能同时修饰一个方法。
125 0
|
10天前
|
存储 Java Go
【Java】(3)8种基本数据类型的分析、数据类型转换规则、转义字符的列举
牢记类型转换规则在脑海中将编译和运行两个阶段分开,这是两个不同的阶段,不要弄混!
120 2
|
10天前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
49 1
|
1月前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案
Java 数据库 Spring
77 0
|
1月前
|
算法 Java
Java多线程编程:实现线程间数据共享机制
以上就是Java中几种主要处理多线程序列化资源以及协调各自独立运行但需相互配合以完成任务threads 的技术手段与策略。正确应用上述技术将大大增强你程序稳定性与效率同时也降低bug出现率因此深刻理解每项技术背后理论至关重要.
121 16
|
2月前
|
缓存 并行计算 安全
关于Java多线程详解
本文深入讲解Java多线程编程,涵盖基础概念、线程创建与管理、同步机制、并发工具类、线程池、线程安全集合、实战案例及常见问题解决方案,助你掌握高性能并发编程技巧,应对多线程开发中的挑战。
|
2月前
|
数据采集 存储 前端开发
Java爬虫性能优化:多线程抓取JSP动态数据实践
Java爬虫性能优化:多线程抓取JSP动态数据实践

热门文章

最新文章