`
perfect5085
  • 浏览: 269771 次
  • 性别: 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线程:深入ThreadLocal 一、标准例子 二、不用ThreadLocal 三、自己实现个ThreadLocal 四、透过...

    Java多线程超级详解(看这篇就足够了).pdf

    多线程能够提升程序性能,也属于高薪必能技术栈,本篇全面详解Java多线程。

    免费开源!!主要是Java技术栈的文章

    1、Java并发体系-第一阶段-多线程基础知识 2、Java并发体系-第二阶段-锁与同步-[1] 3、Java并发体系-第二阶段-锁与同步-[2] 4、Java并发体系-第二阶段-锁与同步-[3] 5、Java并发包-第三阶段-JUC并发包-[1] 6、...

    java虚拟机详解.docx

    而每个线程创建的时候,都会拥有自己的程序计数器和 Java栈,其中程序计数器中的值指向下一条即将被执行的指令,线程的Java栈则存储为该线程调用Java方法的状态;本地方法调用的状态被存储在本地方法栈,该方法栈...

    (超赞)JAVA精华之--深入JAVA API

    1.6 Java线程 1.7 Java 5.0多线程编程 1.8 Java Socket编程 1.9 Java的内存泄漏 1.10 抽象类与接口的区别 1.11 Java变量类型间的相互转换 2 JAVA与WEB 2.1 JMX规范 2.1.1 JMX概述 2.1.2 设备层(Instrumentation ...

    Java内存模型深度解读

    Java内存模型规范了Java虚拟机与计算机内存是如何协同工作的。Java虚拟机是一个完整的计算机的一个模型,因此这个模型自然也包含一个内存模型——又称为...  Java内存模型把Java虚拟机内部划分为线程栈和堆。这张图

    JAVA SE学习精华集锦

    1.6 Java线程 60 1.7 Java 5.0多线程编程 65 1.8 Java Socket编程 80 1.9 Java的内存泄漏 85 1.10 抽象类与接口的区别 86 1.11 Java变量类型间的相互转换 87 2 JAVA与WEB 87 2.1 JMX规范 87 2.1.1 JMX概述 87 2.1.2 ...

    疯狂JAVA讲义

    10.5 Java的异常跟踪栈 374 10.6 异常处理规则 376 10.6.1 不要过度使用异常 377 10.6.2 不要使用过于庞大的try块 378 10.6.3 避免使用Catch All语句 378 10.6.4 不要忽略捕获到的异常 379 10.7 本章小结 379 ...

    互联网公司Java面试题及核心知识点

    内容概要:本书从近一百套最新一线互联网公司面试题中精选而出,涵盖Java架构面试所有技术栈,包 括JVM,Mysql,并发,Spring,Mybatis,Redis,MQ,Zookeeper,Netty, Dubbo,Spring Boot,Spring Cloud,数据结构...

    java范例开发大全源代码

    第1篇 Java编程基础  第1章 Java开发环境的搭建(教学视频:9分钟) 2  1.1 理解Java 2  1.2 搭建Java所需环境 3  1.2.1 下载JDK 3  1.2.2 安装JDK 4  1.2.3 配置环境 5  1.2.4 测试JDK配置...

    java范例开发大全

    实例215 利用栈将字符串逆序输出 381 实例216 动态的数组链表 382 实例217 你能猜出鱼是谁的宠物吗? 387 实例218 使用Collections类对List的排序操作 393 实例219 LinkedList的添加删除操作 395 实例220 运用Vector...

    Java范例开发大全 (源程序)

     实例215 利用栈将字符串逆序输出 381  实例216 动态的数组链表 382  实例217 你能猜出鱼是谁的宠物吗? 387  实例218 使用Collections类对List的排序操作 393  实例219 LinkedList的添加删除操作 395  ...

    JAVA核心知识点整理(有效)

    2.2.2. 虚拟机栈(线程私有) .................................................................................................................... 22 2.2.3. 本地方法区(线程私有) .............................

    Java进阶教程解密JVM视频教程

    4. 了解 Java 内存模型相关知识,见识多线程并发读写共享数据时的问题和 Java 的解决方案。 适应人群 有一定的Java基础,希望提升 Java 内功的人群。 课程亮点 * 系统地学习 JVM 内存结构,垃圾回收、字节码与类...

    Java范例开发大全(全书源程序)

    Java范例开发大全(全书源程序),目录如下: 第1篇 Java编程基础 第1章 Java开发环境的搭建(教学视频:9分钟) 2 1.1 理解Java 2 1.2 搭建Java所需环境 3 1.2.1 下载JDK 3 1.2.2 安装JDK 4 1.2.3 配置环境...

    java范例开发大全(pdf&源码)

    实例215 利用栈将字符串逆序输出 381 实例216 动态的数组链表 382 实例217 你能猜出鱼是谁的宠物吗? 387 实例218 使用Collections类对List的排序操作 393 实例219 LinkedList的添加删除操作 395 实例220 运用Vector...

    深入理解Java虚拟机视频教程(jvm性能调优+内存模型+虚拟机原理)视频教程

    第23节Java内存区域-Java虚拟机栈00:12:04分钟 | 第24节Java内存区域-程序计数器00:12:54分钟 | 第25节Java内存区域-本地方法栈00:02:39分钟 | 第26节Java内存区域-堆内存00:05:08分钟 | 第27节Java内存区域-...

Global site tag (gtag.js) - Google Analytics