分析线程快照的维度
有多少线程在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