20210610 线程数不断飙升问题定位

分析线程快照的维度

有多少线程在RUNNABLE,BLOCKED,WAITING和TIMED_WAITING状态?哪一个线程被阻塞了?谁在阻塞别人?哪一个对象被锁了?关注的是运行状态/阻塞状态。

1)RUNNABLE 线程运行中或I/O等待

2)BLOCKED 线程在等待monitor锁(synchronized关键字)

3)TIMED_WAITING 线程在等待唤醒,但设置了时限,超过时限自动唤醒。

4)WAITING 线程在无限等待唤醒;

 

WAITING

在对象上的线程调用了Object.wait()会进入WAITING状态,直到另一个线程在这个对象上调用了Object.notify()或Object.notifyAll()方法才能恢复。一个调用了Thread.join()的线程会进入WAITING状态直到一个特定的线程来结束。

 

TIMED_WAITING

进入到Timed Waiting(计时等待)状态的两种方法

1)使用sleep()方法,线程睡醒之后进入到Runnable/Blocked状态;

2)使用wait()方法,wait()如果在毫秒值结束之后还没有被notify()唤醒,就会自动醒来,线程进入到Runnable/Blocked状态;

自动唤醒后,如果能够获得Cpu的时间片,就可以继续执行。和Thread.sleep( ) 方法一样。

 

Sleep 时的线程状态

TIMED_WAITING 与 WAITING 间的联系还是很紧密的,主要差异在时限(timeout)参数上。

sle

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值