Java线程状态转换图

转载自:熔岩”博客

原文地址:http://lavasoft.blog.51cto.com/62575/27069


说明:本文只选择了原文的线程状态转换部分,由于原图中的线程状态名称和Java文档中的名称不对应,所以本文重新绘制了状态转换图,并尽量保持了原图的内容和样式。


原图对线程转换的解释非常好,这里补充如下:

1 Thread.State中包含NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING和TERMINATED,并不包含RUNNING状态,但个人感觉区分RUNNING和RUNNABLE会更有利于理解;

2 调用threadObj.join()方法进入WAITING状态后,从WAITING状态离开并没有说明threadObj终止,因为线程终止会调用notifyAll();

3 从WAITING离开为什么要进入BLOCKED?因为调用obj.wait()需要在对象上同步,wait()成功后会释放锁,等待结束后还在同步代码块中,所以要进入BLOCKED获得锁。给出代码也许更好理解。

synchronized (obj) {
         while (<condition does not hold>)
             obj.wait();
         ... // Perform action appropriate to condition
}

关于本图的其他解释请移步到 原文



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值