b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

java多线程死锁 Java线程堆栈分析(2)

电脑杂谈  发布时间:2017-12-25 23:01:55  来源:网络整理

java里多个线程池_java多线程死锁_java死锁怎么解决

在上面这段堆栈输出中,可以看到有很多后台线程和main线程,其中只有main线程属于Java用户线程,其他几个都是虚拟机自动创建的,我们分析的过程中,只关心用户线程即可。

从上面的main线程中可以很直观的看到当前线程的调用上下文,其中一个线程的某一层调用含义如下:

at MyTest.fun1(MyTest.java:15)
    |     |     |              |
    |     |     |              +-----当前正在调用的函数所在的源代码文件的行号
    |     |     +------------当前正在调用的函数所在的源代码文件
    |     +---------------------当前正在调用的方法名
    +---------------------------当前正在调用的类名

另外,堆栈中有:- locked <0x00000000d77d50b8> (a java.lang.Object)语句,表示该线程已经占有柯锁<0x00000000d77d50b8>,尖括号中表示锁ID,这个事系统自动产生的,我们只需要知道每次打印的堆栈,同一个ID表示是同一个锁即可。java多线程死锁每一个线程堆栈的第一行含义如下:

"main" prio=1 tid=0x000000000238e800 nid=0xc940 runnable [0x00000000027af000]
    |       |   |                       |           |           |
    |       |   |                       |           |           +--线程占用内存地址
    |       |   |                       |           +-----------线程的状态
    |       |   |                       +----线程对应的本地线程id号
    |       |   +-------------------线程id
    |       +--------------------------线程优先级
    +-------------------------------线程名称
    
其中需要说明的是,线程对应的本地线程id号,是指Java线程所对应的虚拟机中的本地线程。由于Java是解析型语言,执行的实体是Java虚拟机,因此Java语言中的线程是依附于虚拟机中的本地线程来运行的,实际上是本地线程在执行Java线程代码。

从上面的线程堆栈看,线程堆栈中包含的直接信息为:线程的个数,每个线程调用的方法堆栈,当前锁的状态。线程的个数可以直接数出来;线程调用的方法堆栈,从下向上看,即表示当前的线程调用了哪个类上的哪个方法。而锁得状态看起来稍微有一点技巧。与锁相关的信息如下:

当一个线程占有一个锁的时候,线程的堆栈中会打印--locked<0x00000000d77d50c8>

当一个线程正在等待其它线程释放该锁,线程堆栈中会打印--waiting to lock<0x00000000d77d50c8>

当一个线程占有一个锁,但又执行到该锁的wait()方法上,线程堆栈中首先打印locked,然后又会打印--waiting on <0x00000000d77d50c8>


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-55880-2.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 田建
      田建

      国内的啤酒也是淡如水

    每日福利
    热点图片
    拼命载入中...