Java的六种线程状态

6种线程状态

  • NEW:创建后尚未启动的线程处于这种状态。不会出现在Dump中。
  • RUNNABLE:运行。就绪,等待获取CPU的使用权。运行中,在虚拟机内执行的。
  • BLOCKED:受阻塞并等待监视器锁。
  • WATING:无限期等待另一个线程执行特定操作。
  • TIMED_WATING:有时限的等待另一个线程的特定操作。
  • TERMINATED:已退出的。

状态转换

使得线程变成waitting状态有以下几种方法:

  1. 调用Object对象的wait方法,但没有指定超时值。
  2. 调用Thread对象的join方法,但没有指定超时值。
  3. 调用LockSupport对象的park方法。

使得线程变成timed_waitting状态有以下几种方法:

  1. 调用Thread.sleep方法。
  2. 调用Object对象的wait方法,指定超时值。
  3. 调用Thread对象的join方法,指定超时值。
  4. 调用LockSupport对象的parkNanos方法。
  5. 调用LockSupport对象的parkUntil方法。

使得线程变成blocked状态有以下方法:

  1. 进入一个synchronized代码块失败
  2. 进入一个synchronized方法失败
  3. 在调用了object.wait之后,被其他线程object.notify唤醒之后,重新进入同步代码块或者同步方法失败。

Monitor(管程)

略…

Jstack 的使用

Jstack是Jdk自带的线程跟踪工具,用于打印指定Java进程的线程堆栈信息。

参数说明
jstack -l [pid]

调用修饰

表示线程在方法调用时,额外的重要的操作。线程Dump分析的重要信息。

locked <地址> 目标:使用synchronized申请对象锁成功,监视器的拥有者。

waiting to lock <地址> 目标:使用synchronized申请对象锁未成功,在入口等待队列中等待。

waiting on <地址> 目标:使用synchronized申请对象锁成功后,释放锁开始在资源等待队列中等待。

parking to wait for <地址> 目标:park是基本的线程阻塞原语,不通过监视器在对象上阻塞。随concurrent包会出现的新的机制,与synchronized体系不同。

参考:
Java线程的6种状态及切换
状态转换
Jstack 的使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值