黑马程序员技术交流社区
标题:
java线程问题
[打印本页]
作者:
文密
时间:
2012-4-23 21:18
标题:
java线程问题
java线程不是有几种状态吗,有new,runnable,blocked,waiting,timed waiting,teminated。我想问问blocked和waiting有什么区别。
还有一个问题,线程interrupt以后,线程什么状态,interrupt什么时候用?
作者:
赵嘉男
时间:
2012-4-23 21:24
BLOCKED
受阻塞并等待某个监视器锁的线程处于这种状态。
WAITING
无限期地等待另一个线程来执行某一特定操作的线程处于这种状态。
blocked是被锁住了,需要解锁才能唤醒
而waiting是直接就可以被唤醒
interrupt是线程中断,正常情况下应该是teminated状态
不要使用teminated
在public void run() 里面
这样写:
boolean isrun = true;
while(isrun) {
//do.............
isrun = false;//这样终止
}
作者:
施俊
时间:
2012-4-23 21:32
blocked和waiting应该是阻塞和临时状态吧,老毕把他俩归类成了一个状态,也就是具备运行资格,但没有获取到执行权(也就是说CPU未执行)的状态。
程序处于冻结状态相当于给这个线程打上了一个标签,interrupt方法清除了这个冻结状态标记,使该线程具备执行权,等待CPU的调度。
作者:
龚正军
时间:
2012-4-23 21:54
上面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简单的状态处理应该不会难到你了,那些毕竟只是对线程的操作!!!
---------------------上面都是基础东西,废话我说得有点多了。不知道能帮助你不,如果我说的太简单,你都知道的,就算巩固吧!!!!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2