java线程有哪些状态_每日一问学技术:Java线程状态有哪些?怎么查看线程状态?...

Java线程状态有哪些?NEW:当new Thread时,创建线程对象,此时线程处于NEW状态;

RANNABLE:当调用start方法时启动一个线程,线程状态切换为RANNABLE就堵状态,并进入cpu运行队列,等待操作系统时间片调度运行;

BLOCKED:当执行过程中发生资源未就绪而阻塞时会让出CPU的运行时间片,线程状态切换为BLOCKED状态,比如等待IO设备、等待锁的释放;一旦资源就绪,则将线程重新加入到CPU的运行队列,等待操作系统调度CPU时间片,线程状态重新回到RUNNABLE;

WAITING/TIMED_WAITING:当调用wait/sleep/join/locksupport.lock时线程处于WAITING状态,如果方法带有超时时间,则处于TIMED_WAITING状态,

TERMINATED:当线程运行完成,则将变成TERMINATED状态。

线程处于什么状态时会消耗CPU资源?

除RANNABLE状态外,线程并未执行或让出CPU,所以不消耗CPU资源。而处于RANNABLE仅代表线程处于就绪状态,还需要等待CPU时间片,所以仅当线程处于RANNABLE状态且等到CPU时间片时开始消耗CPU资源。

怎么查看当前运行哪些线程及线程状态?

通过jstack打印线程堆栈,包含所有线程信息和线程状态,或通过jconsole图形化界面查看。

jstack

打印片段:

"RMI TCP Accept-0" #205 daemon prio=4 os_prio=31 cpu=2.61ms elapsed=785100.56s tid=0x00007fa0277c5000 nid=0xbb3b runnable [0x000070001c729000]

java.lang.Thread.State: RUNNABLE

at java.net.PlainSocketImpl.socketAccept(java.base@11.0.8/Native Method)

at java.net.AbstractPlainSocketImpl.accept(java.base@11.0.8/AbstractPlainSocketImpl.java:458)

at java.net.ServerSocket.implAccept(java.base@11.0.8/ServerSocket.java:565)

at java.net.ServerSocket.accept(java.base@11.0.8/ServerSocket.java:533)

at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.executeAcceptLoop(java.rmi@11.0.8/TCPTransport.java:394)

at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.run(java.rmi@11.0.8/TCPTransport.java:366)

at java.lang.Thread.run(java.base@11.0.8/Thread.java:834)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值