黑马程序员技术交流社区

标题: 关于线程4状态有句话不理解,求解释 [打印本页]

作者: 何清林    时间: 2014-3-16 13:01
标题: 关于线程4状态有句话不理解,求解释
本帖最后由 何清林 于 2014-3-16 13:26 编辑

线程的堵塞状态有句话是什么意思?:
"通过对一个线程调用wait()函数后,线程就进入停滞状态,只有当两次对该线程调用notify或notifyAll后它才能两次回到可执行状态。"


难道这句话错了?需要两次吗?

作者: Mid_Wei    时间: 2014-3-16 13:10
通俗点说就是线程被暂停一下,仔细点说是线程在运行的时候,cpu把执行权拿走了 给了别人, 该线程没有了执行权就只能等cpu下次分配给它。不知道这样说你能明白不
作者: Mid_Wei    时间: 2014-3-16 13:20
Java中的线程的生命周期大体可分为5种状态。

①NEW:这种情况指的是,通过New关键字创建了Thread类(或其子类)的对象

②RUNNABLE:这种情况指的是Thread类的对象调用了start()方法,
            这时的线程就等待时间片轮转到自己这,以便获得CPU;
            第二种情况是线程在处于RUNNABLE状态时并没有运行完自己的run方法,
            时间片用完之后回到RUNNABLE状态;
            还有种情况就是处于BLOCKED状态的线程结束了当前的BLOCKED状态之后重新回到RUNNABLE状态。

③RUNNING:这时的线程指的是获得CPU的RUNNABLE线程,RUNNING状态是所有线程都希望获得的状态。

④DEAD:处于RUNNING状态的线程,在执行完run方法之后,就变成了DEAD状态了。

⑤BLOCKED:这种状态指的是处于RUNNING状态的线程,出于某种原因,
           比如调用了sleep方法、等待用户输入等而让出当前的CPU给其他的线程。
作者: itpower    时间: 2014-3-16 13:20
本帖最后由 itpower 于 2014-3-16 13:29 编辑

阻塞就是暂停了,卡在哪里了,必须要等到有人叫醒它,他才会接着往下执行,不唤醒则一直卡在哪里不动

通过对一个线程调用wait()函数后,线程就进入停滞状态,只有当两次对该线程调用notify或notifyAll后它才能两次回到可执行状态。
这句话是错的,度娘的答案也不一定是全部对的,别被忽悠咯 老毕讲的才是最权威

线程阻塞后就会存入一个集合中,也就是一个线程池中,notify是唤醒第一个存进去的线程,

notifyAll是将线程池中所有的线程都唤醒一遍
所以只需要唤醒一次就可以了...




作者: 何清林    时间: 2014-3-16 13:27
itpower 发表于 2014-3-16 13:20
阻塞就是暂停了,卡在哪里了,必须要等到有人叫醒它,他才会接着往下执行,不唤醒则一直卡在哪里不动

线程阻塞 ...

哦,比较理解了,是不是说一次唤醒就可以了?呵呵
作者: chaos    时间: 2014-3-16 18:01
wait()是线程暂停
notify是一个wait() 的线程继续执行
notifyAll是所有wait()的线程都继续执行




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2