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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 何清林 中级黑马   /  2014-3-16 13:01  /  814 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 何清林 于 2014-3-16 13:26 编辑

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


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

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

5 个回复

倒序浏览
通俗点说就是线程被暂停一下,仔细点说是线程在运行的时候,cpu把执行权拿走了 给了别人, 该线程没有了执行权就只能等cpu下次分配给它。不知道这样说你能明白不
回复 使用道具 举报
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给其他的线程。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 itpower 于 2014-3-16 13:29 编辑

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

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

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

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



评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
itpower 发表于 2014-3-16 13:20
阻塞就是暂停了,卡在哪里了,必须要等到有人叫醒它,他才会接着往下执行,不唤醒则一直卡在哪里不动

线程阻塞 ...

哦,比较理解了,是不是说一次唤醒就可以了?呵呵
回复 使用道具 举报
wait()是线程暂停
notify是一个wait() 的线程继续执行
notifyAll是所有wait()的线程都继续执行
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马