`
perfect5085
  • 浏览: 271145 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java 线程栈信息详解

 
阅读更多

 

windows系统中:
	进程所拥有的内存空间都是独立的,此进程所持有的内存其它进程是不可以直接访问的,
	而且在windows系统内部一个进程就是一个运行的运用程序,
	而为了解决应用程序内部的并行问题便有了线程的概念,线程没有自我独立的内存空间,
	在一个进程中所有的线程共享这个进程所持有的内存空间。 
Unix, Linux系统中:
	某些Unix系统当中,进程所持有的内存空间是可以被其他进程进行访问的,而且一个运用程序可能不止一个进程,
	这样的系统没有线程的概念,运用的并行问题有多个进程协调来解决。 

Java为了实现平台无关性, 必须解决不同操作系统中进程,线程的差异,因此Java建立了一套自己的进程与线程机制。
	这套机制与windows系统的颇为相似,但是底层实现确实根据不同平台的机制进行实现。
	
线程栈:
	线程栈存储的信息是指某时刻线程中方法调度的信息,当前调用的方法总是位于栈顶。
	当某个方法被调用时,此方法的相关信息压入栈顶。
	
package com.demo.test;

import com.demo.util.PrinterUtil;

import junit.framework.TestCase;

public class StackTraceTest extends TestCase
{
	public void testThreadInfo()
	{
		printStackTrace();
	}
	
	public static void printStackTrace()
	{
		StackTraceElement[] elements = getCurrentThreadStackInfo();
		
		for(int i=0; i<elements.length; i++)
		{
			PrinterUtil.println("-------------------------------------------------------");
			PrinterUtil.print(elements[i].getClassName() + " --- ");
			PrinterUtil.print(elements[i].getFileName() + " --- ");
			PrinterUtil.print(elements[i].getMethodName() + " --- ");
			PrinterUtil.print(elements[i].getLineNumber() + " --- ");
			PrinterUtil.println("");
		}
	}
	/**	 
	 * 如下方法中:我们可以有两种方式得到当前线程中栈的信息,
	 * 当我们通过getStackTrace()得到线程栈的信息时,此时线程栈的栈顶存储的信息就是调用了getStackTrace()方法的信息,
	 * 也就是getCurrentThreadStackInfo()的信息。
	 * @return
	 */
	public static StackTraceElement[] getCurrentThreadStackInfo()
	{
		StackTraceElement[] elements = new Throwable().getStackTrace();
		if(elements == null)
		{
			elements = Thread.currentThread().getStackTrace();
		}
		return elements;
	}
}
分享到:
评论

相关推荐

    Java线程详解大全

    Java线程是并发编程的核心部分,它允许程序在同一时间执行多个独立的任务,从而提高系统效率和响应速度。本文将深入探讨Java线程的概念、生命周期、实现方式以及相关的同步机制。 首先,理解线程的基本概念至关重要...

    java线程详解

    Java线程:新特征-阻塞栈 Java线程:新特征-条件变量 Java线程:新特征-原子量 Java线程:新特征-障碍器 Java线程:深入ThreadLocal 一、标准例子 二、不用ThreadLocal 三、自己实现个ThreadLocal 四、透过...

    Java线程详解.ppt

    Java线程是并发编程的核心部分,它允许程序在同一时间执行多个任务,从而提高了系统的效率和资源利用率。在Java中,线程是通过`Thread`类或者实现`Runnable`接口来创建和管理的。 首先,我们要理解进程和线程的概念...

    详解java堆和栈

    ### 详解Java堆和栈 #### 一、引言 在Java编程中,理解堆(Heap)和栈(Stack)的概念及其区别对于程序员来说至关重要。本文将深入剖析这两个概念,并探讨它们之间的差异以及如何影响程序的运行。 #### 二、Java...

    Java栈详解Java栈详解.doc

    Java栈是Java虚拟机(JVM)内存模型的重要组成部分,主要负责存储方法调用过程中的局部变量、操作数和方法返回信息。栈的特点是后进先出(LIFO),每个线程都有自己的独立Java栈,确保了线程安全的数据存储。 1. **...

    IBM java线程堆栈分析工具

    总之,IBM的jca467.jar是WAS环境下进行Java线程分析的强大工具,它能够帮助开发者深入洞察应用程序的内部运行情况,有效地定位和解决多线程问题,提升系统的稳定性和性能。通过熟练掌握并运用这个工具,开发者可以在...

    JAVA多线程模型详解

    Java线程具有创建、就绪、运行、阻塞和死亡五种状态。创建状态是指用new操作创建了一个Thread实例,但尚未调用start()方法;就绪状态是指线程可以运行,但CPU还未分配时间片;运行状态是指线程获得CPU时间片,正在...

    Java中堆内存和栈内存详解

    ### Java中堆内存和栈内存详解 #### 一、引言 Java作为一种广泛使用的编程语言,其内存管理机制是理解程序行为的关键。本文将深入探讨Java中的两种主要内存区域:堆内存(Heap Memory)和栈内存(Stack Memory)。...

    Java线程PDF

    ### Java线程知识点详解 #### 一、Java线程概览 - **定义**: Java线程是Java语言中实现多线程编程的核心概念之一。它允许开发者在一个进程中创建多个独立执行的路径,这些路径可以并发运行,从而提高程序的效率和...

    java多线程设计模式详解(PDF及源码).zip

    Java多线程设计模式是...通过阅读“java多线程设计模式详解(PDF及源码)”的资料,我们可以深入了解这些知识点,并通过提供的源码加深理解,学习如何在实际项目中应用多线程设计模式,提高程序的并发性能和可维护性。

    java线程.pdf

    ### Java线程详解 #### 一、引言 在计算机科学领域中,进程与线程的概念至关重要。进程是指操作系统中可并发执行的程序实例,而线程则是在进程中执行的一个控制单元,也是进程内的可调度实体。随着多核处理器的...

    Java线程入门

    ### Java线程入门知识点详解 #### 一、Java线程概览 - **目标读者**:本教程面向那些已经熟练掌握Java语言基本应用但对多线程编程尚不熟悉的程序员。 - **主要内容**:本教程将从零开始介绍Java线程的基础知识,...

    java多线程设计模式详解+源码

    2. **线程状态**:Java线程有五种状态,包括新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Terminated)。了解这些状态有助于理解和解决线程同步问题。 3. **线程同步**:为避免多线程...

    java多线程设计模式详解.rar

    在Java中,线程是程序中的执行流,每个线程都有自己的程序计数器、虚拟机栈、本地方法栈和堆。主线程启动后,可以通过创建Thread对象或者实现Runnable接口来创建新的线程。线程的生命周期包括新建、就绪、运行、阻塞...

    JAVA多线程

    每个线程都有自己的执行栈,即线程栈,用于存储线程的局部变量和方法调用信息。线程栈随着线程的创建而创建,随着线程的结束而销毁。线程栈的大小可以在创建线程时指定。此外,Java提供了线程本地存储(ThreadLocal)...

    Java多线程编程详解

    线程是轻量级进程,它们共享同一进程的内存空间,但拥有各自的程序计数器、栈和局部变量。这意味着线程间的通信比进程间通信更为高效,因为它们可以直接访问共享数据。尽管多个线程可能看似同时运行,但在单CPU系统...

    java 多线程

    #### 七、Java线程运行机制 Java虚拟机(JVM)通过线程执行程序代码。每个线程都有自己的程序计数器和方法调用栈。 - **程序计数器**:指示当前线程正在执行的方法中的下一条字节码指令。 - **方法调用栈**:...

    详解Java线程堆栈

    Java线程堆栈详解 Java线程堆栈是一种强大的诊断工具,能够帮助开发者快速定位多线程应用程序中的问题。通过分析线程堆栈,可以找到系统中各种问题的根源,如系统无缘无故CPU过高、系统挂起、系统运行越来越慢、...

    java 线程详解及线程与进程的区别

    Java线程详解与进程的区别是理解多任务并发执行的关键。在计算机系统中,进程和线程是两种不同的执行单元。 1. **进程**:每个进程都有独立的内存空间,这意味着不同进程之间的数据不能直接共享。例如,当你打开多...

Global site tag (gtag.js) - Google Analytics