A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 文密 中级黑马   /  2012-4-23 21:18  /  2319 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

java线程不是有几种状态吗,有new,runnable,blocked,waiting,timed waiting,teminated。我想问问blocked和waiting有什么区别。
还有一个问题,线程interrupt以后,线程什么状态,interrupt什么时候用?

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

4 个回复

倒序浏览
BLOCKED
受阻塞并等待某个监视器锁的线程处于这种状态。
WAITING
无限期地等待另一个线程来执行某一特定操作的线程处于这种状态。
blocked是被锁住了,需要解锁才能唤醒
而waiting是直接就可以被唤醒

interrupt是线程中断,正常情况下应该是teminated状态

不要使用teminated
在public void run() 里面
这样写:
boolean isrun = true;
while(isrun) {
//do.............
isrun = false;//这样终止
}
回复 使用道具 举报
blocked和waiting应该是阻塞和临时状态吧,老毕把他俩归类成了一个状态,也就是具备运行资格,但没有获取到执行权(也就是说CPU未执行)的状态。
程序处于冻结状态相当于给这个线程打上了一个标签,interrupt方法清除了这个冻结状态标记,使该线程具备执行权,等待CPU的调度。
回复 使用道具 举报
上面2位已经解释了你问的问题,但是估计你还是没弄明白吧??
其实很简单,你问的问题可能都不是你真正想知道的哦。线程的几种状态:很难说你能把NEW,RUNNABLE也算在状态里面啊。
首先你要清楚的是:线程如果只是单线程那么很多状态都是不需要使用的,我们一般说线程大家都会想到多线程。
那么你首先要知道多线程是什么:多线程有2种实现方法:一种是:继承:extends thread(这是通过继承THREAD父类实现的,但是你应该知道JAVA是单继承,如果继承了THREAD就没发再继承其他的了,所以很少用到)
  第二种是:实现:implements runnable(这就是你写道的RUNNABLE,他不是什么状态,是一个类(runnable),JAVA工程师通过实现runnable类让JAVA更灵活,因为JAVA是支持多实现的,所以我们基本都用RNNABLE来实现多线程,要重点掌握)
但是你要明白最重要的是:runnable仍然是通过thread来创建多线程的。只不过你的子类是通过实现runnable接口而已:所以你要知道在thread构造函数里面有个方法是:Thread s=new Thread(x);   这里面的 x就是你的子类。通过这样来实现了runnable和thread的联系。做到了用runnable实现多线程。
以上如果你都理解了,那么至于后面的wait,  notify,  sleep , interrupt ,  blocked简单的状态处理应该不会难到你了,那些毕竟只是对线程的操作!!!
---------------------上面都是基础东西,废话我说得有点多了。不知道能帮助你不,如果我说的太简单,你都知道的,就算巩固吧!!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马