Java线程java.lang.Thread.State状态详解

Java线程java.lang.Thread.State状态详解
在实际开发过程中,我们经常会遇到java程序锁死,服务器宕机等致命问题。使用jstack命令监听jvm状态,发现线程都处在状态Locked、TIMED_WAITING、RUNNABLE等状态。截取部分状态如下:
2016-04-27 15:45:12
Full thread dump Java HotSpot(TM) Server VM (23.25-b01 mixed mode):

"Attach Listener" daemon prio=10 tid=0x6b817400 nid=0x6826 waiting on condition [0x00000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
    – None
    
"GC Daemon" daemon prio=10 tid=0x6afee400 nid=0x74c0 in Object.wait() [0x6a2fe000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    – waiting on <0x738a6228> (a sun.misc.GC$LatencyLock)
    at sun.misc.GC$Daemon.run(GC.java:117)
    – locked <0x738a6228> (a sun.misc.GC$LatencyLock)

   Locked ownable synchronizers:
    – None

"RMI TCP Accept-0" daemon prio=10 tid=0x6b14a000 nid=0x74bc runnable [0x6b2ad000]
   java.lang.Thread.State: RUNNABLE
    at java.net.PlainSocketImpl.socketAccept(Native Method)
    at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:398)
    at java.net.ServerSocket.implAccept(ServerSocket.java:530)
    at java.net.ServerSocket.accept(ServerSocket.java:498)
    at sun.management.jmxremote.LocalRMIServerSocketFactory$1.accept(LocalRMIServerSocketFactory.java:52)
    at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.executeAcceptLoop(TCPTransport.java:387)
    at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.run(TCPTransport.java:359)
    at java.lang.Thread.run(Thread.java:724)

   Locked ownable synchronizers:
    – None
    
这些状态都代表什么意思呢?详解如下:
1.NEW 
至今尚未启动的线程的状态。 

2.RUNNABLE 
可运行线程的线程状态。处于可运行状态的某一线程正在 Java 虚拟机中运行,但它可能正在等待操作系统中的其他资源,比如处理器。 

3.BLOCKED 
受阻塞并且正在等待监视器锁的某一线程的线程状态。处于受阻塞状态的某一线程正在等待监视器锁,以便进入一个同步的块/方法,或者在调用 Object.wait 之后再次进入同步的块/方法。 

4.WAITING 
某一等待线程的线程状态。某一线程因为调用下列方法之一而处于等待状态: 
不带超时值的 Object.wait
不带超时值的 Thread.join

LockSupport.park 
处于等待状态的线程正等待另一个线程,以执行特定操作。 例如,已经在某一对象上调用了 Object.wait() 的线程正等待另一个线程,以便在该对象上调用 Object.notify() 或 Object.notifyAll()。已经调用了 Thread.join() 的线程正在等待指定线程终止。 

5.TIMED_WAITING具有指定等待时间的某一等待线程的线程状态。某一线程因为调用以下带有指定正等待时间的方法之一而处于定时等待状态: 
Thread.sleep
带有超时值的 Object.wait
带有超时值的 Thread.join
LockSupport.parkNanos
LockSupport.parkUntil

6.TERMINATED 
已终止线程的线程状态。线程已经结束执行。 

版权声明:本文为博主原创文章,未经博主允许不得转载。原文地址:http://www.xttblog.com/?p=472

Java线程java.lang.Thread.State状态详解

: » Java线程java.lang.Thread.State状态详解

原创文章,作者:dweifng,如若转载,请注明出处:https://blog.ytso.com/251440.html

(0)
上一篇 2022年5月3日
下一篇 2022年5月3日

相关推荐

发表回复

登录后才能评论