高并发系统- 影响性能的指标信息blocked,waiting

一 影响性能信息概述

1.1 Blocked

Blocked:求锁而不得;线程处于blocked状态时,它不会占用CPU时间片

线程进入blocked状态通常是因为它在等待获取一个有synchronized关键字保护的对象的锁,此时该线程被暂时阻止执行期后续代码。

1.2 waiting

Waiting:处于waiting状态的线程不会占用CPU时间片。因为线程已经主动暂停了自己的执行,等待某个条件被满足或者被其他线程唤醒

常见的情况是线程调用了Object.wait()、Thread.join()或者LockSupport.park()方法。这些方法会导致线程释放它持有的锁(如果有的话),并且暂停执行,进入waiting状态。

1.3 timed_waiting

Timed_waiting:处于timed_waiting状态的线程同样不会占用 CPU 时间片。在等待时间结束之前,线程调度器会将 CPU 资源分配给其他可运行的线程。例如:当一个线程调用Thread.sleep(1000)(睡眠 1 秒)时,它会进入timed_waiting状态,在这 1 秒内,它不会占用 CPU 时间片,其他线程可以利用这些时间片进行执行。一旦睡眠时间结束,线程会从timed_waiting状态转换为runnable状态,此时就有机会再次获得 CPU 时间片并继续执行。

常见的有:Object.wait(long timeout)、Thread.sleep(long millis)、LockSupport.parkNanos(long nanos)或者LockSupport.parkUntil(long deadline)。这些方法会使线程暂停执行一段特定的时间。

https://mp.weixin.qq.com/s/qlZ6Y3KD9Bh4HxepnUgEqw

1.4 总结

含有synchronized的方法,容易造成 blocked

Wait(),join(),locksuport.part();容易造成wating

Sleep(n),wait(n):容易造成timed_waiting

不管wait是否含有时间参数,都需要notify/notifyall唤醒,其中

带时间参数的wait(long timeout)会在指定时间内等待,如果超时时间内没有被唤醒,则线程返回。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值