一 影响性能信息概述
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)会在指定时间内等待,如果超时时间内没有被唤醒,则线程返回。

384

被折叠的 条评论
为什么被折叠?



