您好、欢迎来到现金彩票网!
当前位置:2019欢乐棋牌 > 转储 >

Java中如何生成线程转储

发布时间:2019-06-28 07:37 来源:未知 编辑:admin

  我们当中的所有人在学习/开发的过程中都会遇到或者曾经遇到过异常。异常是java报告运行时错误的一种方式。异常分为两部分:消息和堆栈信息。消息是告诉你什么出错了。堆栈信息提供了一个涉及到的所有类的完整的调用流程来作为运行时错误的一部分。下面的例子是一个ArrayIndexOutOfBoundsException(数组下标越界异常)的堆栈信息:在上面的异常中,第一行“ Exception in thread main java.lang.ArrayIndexOutOfBoundsException: 4”告诉你JVM在尝试访问数组下标为4的元素的值时遇到这个异常。遇到异常的java线程是“main”。

  接下来让我们读一下堆栈信息。翻阅异常信息的规则是从第一行(消息行)了解是什么异常,然后接着读下去,来了解调用流程。上面的例子中,调用流程开始于 Test.java的第20行(main方法),然后他调用了Test的构造方法。构造方法在堆栈信息中用表示。然后它跳转到 Test类的run()方法,然后在13行遇到了这个抛出的异常。

  从上面的堆栈信息中,我们能够得出结论,在Test.java中,尝试读取的值超过了传递的数组的大小。

  java的线程转储可以被定义为JVM中在某一个给定的时刻运行的所有线程的快照。一个线程转储可能包含一个单独的线程或者多个线程。在多线EE应用服务器,将会有许多线程和线程组。每一个线程都有它自己的调用堆栈,在一个给定时刻,表现为一个独立功能。线程转储将会提供JVM中所有线 程的堆栈信息,对于特定的线程也会给出更多信息。

  java虚拟机,或者称为JVM,是一个操作系统级别的进程。java线程是JVM进程的子进程或者轻量级进程(Solar中的叫法)。

  线程转储可以通过向JVM进程发送一个SIGQUIT信号来生成。有两种不同方式来向进程发送这个信号:

  Runnable-线程正在运行,或者准备好获取CPU时间后运行。JRockit线程转储中把这种状态当做Active。

  Waiting on Monitor-线程休眠,或者在等待一个对象,或者等待被其他线程唤醒。在线程对象中调用sleep()方法,或者在一个对象中调用wait()方法时就会有这种情况发生。

  举个例子,在WebLogc服务器中,空闲的执行线程处于这种状态,他们会一直等待直到一个Socket reader线程有新的任务才唤醒他们。堆栈信息就会如下所示:

http://wrenblossom.com/zhuanchu/150.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有