在看书的时候看到了一个观察死锁的工具TDA(Thread Dump Analysis)
看了半天,才知道这玩意儿需要由jvm产生一个Thread Dump
这个Thread Dump跟之前看到的Heap Dump也不是一回事
windows下是ctrl+break触发,unix下是ctrl+\或者kill -QUIT pid触发
默认是输出到System.out,当然,你可以重定向的
还有一个简单方便快捷的方法:Java VisualVM,并且Java VisualVM中还提供了TDA的插件下载
太深入的现在还没这水平,在之前的代码调试中用了一下
之前的代码中有这样一个错误
void waitThread(Thread t) throws InterruptedException
{
synchronized(this)
{
freeThread.add((ThreadNode) t);
busyThreadsNum.decrementAndGet();
synchronized(t)
{
t.wait();
}
}
}
很明显,问题是锁住了pool的固有锁,然后等待
这是一个Java VisualVM的一个界面
只要简单地点击“线程 Dump”,就能得到一个线程Dump了,然后用TDA查看一下线程池0-9的状态
可以看到,上锁,然后等待,还有在这问题出现在哪一行,都明晰了
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0044/5160/443ee935-8ce3-3dba-ba6d-715fef3cf340-thumb.png)
- 大小: 39.7 KB
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0044/5165/b2e3929e-c6c1-38f9-9db9-7284d6996447-thumb.png)
- 大小: 13.6 KB
分享到:
相关推荐
Java并发编程中的线程池是提高系统效率的关键工具,它解决了频繁创建和销毁线程的问题。线程池通过复用已存在的线程来处理任务,从而避免了每次任务执行完毕后销毁线程的开销。在Java中,线程池的核心实现是`java....
Java并发编程中的JUC线程池是Java程序员必须掌握的关键技术之一,它允许开发者高效地管理并发执行的任务,充分利用多核处理器的性能。线程池的出现解决了在并发环境中线程创建、销毁带来的开销,提高了系统资源的...
线程池是Java多线程编程中的重要概念,它是一种管理线程的机制,通过池化技术有效地管理和控制线程的生命周期,以提高系统资源的...通过持续学习和实践,我们可以更好地驾驭线程池,提升系统的并发处理能力和响应速度。
Java8并行流中自定义线程池操作示例 Java8并行流中自定义线程池操作示例主要介绍了Java8并行流中自定义线程池操作,结合实例形式分析了并行流的相关概念、定义及自定义线程池的相关操作技巧。 1. 概览 Java8引入了...
Java并发编程实践中的线程池是一个关键的概念,它在多线程编程中扮演着至关重要的角色,有效地管理和调度线程资源,以提高系统的性能和效率。线程池通过复用已存在的线程来减少线程的创建和销毁开销,避免了频繁的上...
线程池是Java并发编程的核心技术之一,它通过复用一组预创建的线程来执行任务,从而减少了创建和销毁线程的开销,提高了系统的响应速度和处理能力。 #### 线程池的作用 线程池可以显著提高多线程应用的性能和效率...
在Java编程中,线程池是一种管理线程资源的有效方式,它可以提高...在阅读《聊聊并发(3)Java线程池的分析和使用》这份文档时,你可以学习到更多关于线程池的实践技巧和案例分析,这对于提升Java开发能力大有裨益。
Java 并发学习笔记: 进程和线程, 并发理论, 并发关键字, Lock 体系, 原子操作类, 发容器 & 并发工具, 线程池, 并发实践 Java是一种面向对象的编程语言,由Sun Microsystems于1995年推出。它是一种跨平台的...
Java并发编程是Java开发中的重要领域,特别是在大型系统和服务器端应用中,高效地利用多核处理器资源,实现高并发性能至关重要。...通过深入学习和实践,开发者可以更好地驾驭Java并发,提升程序的性能和稳定性。
Java线程池是一种高效管理线程资源的工具,它能够帮助开发者有效地控制并调度线程,从而提升系统性能,减少系统资源的浪费。...通过深入学习和实践,我们可以更好地利用线程池来优化我们的Java应用程序。
Java并发编程是提升系统性能的关键,理解并熟练运用线程池可以有效地管理线程资源,提高系统的响应速度和并发能力。在实际项目中,合理设计和配置线程池,结合具体业务需求,能够使程序运行更加稳定、高效。通过阅读...
通过学习《Java并发编程实战》的源码,你可以更直观地了解这些概念如何在实际代码中实现,从而提升你的并发编程能力。在IDE中运行这些示例,可以加深对并发原理的理解,同时也能锻炼解决问题的能力。记住,实践是...
Java线程池是一种高级的多线程处理框架,它是Java并发编程中非常重要的一个组件。线程池的原理和实现涉及到操作系统调度、内存管理和并发控制等多个方面。理解线程池的工作原理有助于优化程序性能,避免过度创建和...
Java中的线程池是多线程编程中一种高效、可管理的执行机制。它通过预先创建并维护一组线程,避免了频繁地创建和销毁线程带来的开销,从而提高了程序的性能和响应速度。线程池的核心概念包括以下几个方面: 1. **...
### JAVA线程池原理及几种...综上所述,线程池是Java并发编程中的一个重要概念,它可以帮助开发者更高效地管理线程资源,提高应用程序的性能。理解线程池的工作原理及其配置细节,对于构建高性能的并发应用至关重要。
通过深入学习"Java并发编程与实践"文档,开发者能够提升自己在高并发环境下的编程能力,设计出更加健壮和高效的Java应用程序。这份资料对于理解Java并发原理、优化并发代码和解决并发问题具有极大的价值。
Java线程池封装是Java并发编程中重要的一环,合理的线程池配置和封装能显著提升程序的性能和稳定性。理解线程池的工作原理,根据业务需求选择合适的参数,以及正确处理拒绝策略,都是实现高效并发处理的关键。在实际...
Java并发编程是Java开发中的重要组成部分,特别是在多核处理器和高并发应用环境下,高效地管理线程资源变得至关重要。`java.util.concurrent` 包(简称JUC)是Java提供的一个强大的并发工具包,它提供了丰富的并发...
通过学习《Java 并发编程实战》,开发者可以更好地理解和掌握Java并发编程的核心技术,从而编写出更健壮、高效的并发程序。这本书的PDF版本包含了清晰的目录结构,方便读者查阅和学习。使用福昕阅读器打开,能确保...
- Java并发工具类:如`java.util.concurrent`包下的`ExecutorService`, `Semaphore`, `CyclicBarrier`, `CountDownLatch`等,它们为并发编程提供了丰富的解决方案。 - 死锁、活锁和饥饿:并发编程中的三个常见问题...