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

线程跟踪者,可跟踪当前整个类调用关系图

 
阅读更多


关键字:线程跟踪者,可跟踪当前整个类调用关系图

实现类如下:

package com.ganji.as.web.filters.util;

import org.apache.commons.lang.StringUtils;

/**
* 说明:可跟踪整个调用关系图,直接在你认为出问题的地方调用,就能找到是那一层调用出了问题
* 线程栈跟踪者(又名错误定位者)
* @author zhaoshijie
*
*/
public class ThreadStackTracker {

/**
* 说明:可以用System.out替换成log方式
* 跟踪整个调用关系和过程
*/
public static void getAllCaller() { 
System.out.println("ThreadStackTracker跟踪开始********************************************");
        StackTraceElement stack[] = (new Throwable()).getStackTrace(); 
        for (int i = 0; i < stack.length; i++) 
        { 
            StackTraceElement s = stack[i]; 
            System.out.format(" ClassName:%d\t%s\n", i, s.getClassName()); 
            System.out.format("MethodName:%d\t%s\n", i, s.getMethodName()); 
            System.out.format("  FileName:%d\t%s\n", i, s.getFileName()); 
            System.out.format("LineNumber:%d\t%s\n\n", i, s.getLineNumber()); 
        } 
}


/**
* 说明:可以用System.out替换成log方式
* 跟踪关键调用关系过程(根据指定的包名称跟踪)
*/
public static void getSimpleCaller(String trackPackageName) {
if(StringUtils.isBlank(trackPackageName)){
return ;
}
System.out.println("ThreadStackTracker跟踪开始********************************************");
        StackTraceElement stack[] = (new Throwable()).getStackTrace(); 
        for (int i = 0; i < stack.length; i++)  {
        if(i==0){//0的时候是该类本身,省略掉
        continue;
        }
            StackTraceElement s = stack[i]; 
            if(s.getClassName().contains(trackPackageName)){
            System.out.format(" ClassName:%d\t%s\n", i, s.getClassName()); 
            System.out.format("MethodName:%d\t%s\n", i, s.getMethodName()); 
            System.out.format("  FileName:%d\t%s\n", i, s.getFileName()); 
            System.out.format("LineNumber:%d\t%s\n\n", i, s.getLineNumber());
            }
        }
}



}
分享到:
评论

相关推荐

    MFC多线程 工作者线程 用户界面线程

    在开发和调试多线程程序时,可以利用MFC提供的afxThreadState类来跟踪当前线程的状态,以及使用Visual Studio的调试工具监视各个线程的行为。此外,设置断点、查看线程调用堆栈以及分析线程同步状态也是常用的调试...

    多线程压缩图片程序

    本文将详细解析"多线程压缩图片程序"这一主题,旨在帮助初学者理解如何利用多线程技术和图片处理算法来优化应用程序性能。 首先,我们要了解多线程的概念。多线程是指在一个应用程序中同时执行多个独立的线程,这些...

    C#判断线程池中所有的线程是否已经完成

    如果你需要考虑到这些情况,可能需要更复杂的逻辑,例如结合`Task`类或自定义的线程同步机制来跟踪任务状态。此外,线程池的复杂性意味着在某些情况下,即使所有工作者线程都可用,也可能存在未完成的任务。因此,...

    C#多线程不阻塞

    它允许调用者在不等待函数执行完毕的情况下继续执行其他任务,实现所谓的"并发"执行。在C#中,我们可以使用委托(如`MethodInvoker`)和`BeginInvoke()`来实现异步调用。如上文所示,通过`BeginInvoke()`调用`Foo()`...

    TUniado 多线程实例 DELPHI2010

    - **生产者-消费者模型**:线程间通过队列进行数据传递,一个线程生产数据,另一个线程消费数据。 - **读写锁**:用于保护共享资源,允许多个读取操作并行,但只允许一个写入操作。 通过深入理解这些概念,并结合...

    多线程程序小例子实现

    我们可以通过Thread类的getState()方法获取线程当前的状态,以便了解线程的运行情况。 在Java中,可以使用`java.lang.management.ThreadMXBean`类提供的管理接口来获取更详细的线程信息,如线程ID、线程名、堆栈...

    kafka demo ,两种线程消费方式

    - **线程安全**:由于多个线程将访问同一个消费者实例,必须确保代码是线程安全的,尤其是在调用`consumer.poll()`方法时,该方法用于从Kafka拉取新消息。 - **线程协调**:使用多线程时,需要协调每个线程的消费...

    易语言源码易语言全局线程钩子源码.rar

    易语言是一种专为初学者设计的编程语言,它采用了贴近自然语言的设计,使得编程更为简单易懂。在“易语言全局线程钩子源码”这个主题中,我们将深入探讨易语言如何实现全局线程钩子,以及相关的重要概念和技术。 ...

    java多线程之消费者生产者模式.pdf

    如果满,则调用`wait()`使当前线程等待,释放锁,让其他线程(可能是消费者)有机会执行。当有可用的空间时,`notify()`会被调用,这可能会唤醒一个等待的线程,但并不保证立即执行。 2. **消费者**: - `Consumer...

    Delphi 多线程实例.rar

    TThread类提供了Synchronize和Queue方法,前者用于在线程安全的环境下执行代码,后者则允许在主线程中异步执行代码。 4. **线程优先级**:线程的优先级可以调整,高优先级的线程会得到更多的CPU时间片,但过度使用...

    一个简单的多线程应用程序

    本项目“一个简单的多线程应用程序”是专为初学者设计的,旨在通过VC(Visual C++)这一流行的Microsoft开发环境,帮助学习者理解和掌握多线程编程的基本概念和实践。 首先,我们要理解什么是多线程。在单线程程序...

    java多线程实例

    `wait()` 方法使得当前线程等待,直到其他线程调用 `notifyAll()` 唤醒所有等待的线程。当商品达到最大库存或为空时,生产者和消费者将进入等待状态,直到条件改变。 3. `Producter` 类:实现了 `Runnable` 接口,...

    C#WinForm跨线程更新UI的四种方法

    SynchronizationContext是.NET Framework提供的一种上下文同步机制,它可以跟踪当前线程,确保回调方法在正确的线程上执行。在WinForms应用中,Application.Current.SynchronizationContext可用于获取UI线程的上...

    多线程编程——MFC中的多线程开发

    在实际开发中,为了调试多线程程序,Visual Studio提供了丰富的调试工具,如线程视图、同步调用查看等,这些工具可以帮助我们跟踪线程执行情况,定位和解决线程问题。 总结一下,MFC中的多线程开发涉及线程创建、...

    【IT十八掌徐培成】Java基础第17天-05.多线程复制-多条跟踪.zip

    wait()和notify()是Object类的方法,用于线程间通信,当一个线程调用wait()后,它会释放持有的锁并进入等待状态,直到其他线程调用notify()唤醒它。Lock接口和ReentrantLock提供了更细粒度的锁控制,支持可中断的...

    重大软院操作系统实验二:线程调度

    5. **性能分析**:使用工具如`strace`跟踪系统调用,`perf`进行性能分析,理解线程调度对系统性能的影响。 6. **多线程编程**:编写多线程程序,实现特定的功能,如生产者消费者模型、读者写者问题等经典并发问题的...

    15个多线程问题集锦

    - **分析方法**:Thread Dump包含了当前所有线程的状态信息,包括线程ID、线程名称、线程状态以及堆栈跟踪。通过分析这些信息,可以诊断线程挂起、死锁等问题。例如,寻找长时间处于WAITING或BLOCKED状态的线程,...

Global site tag (gtag.js) - Google Analytics