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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵许星 中级黑马   /  2013-10-29 12:37  /  1025 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 赵许星 于 2013-10-30 12:21 编辑

notify()只能唤醒线程池中的一个线程资源?但如何确定唤醒哪一个呢? 有没有定向唤醒?
多线程run()方法中没有使用死循环,该线程只执行一次?执行完后就死掉了!

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

5 个回复

倒序浏览
是的,只能唤醒其中一个线程,选择是任意的,并在对实现做出决定时发生,也就是说你不能控制。
如果没有循环的话run()执行完就关闭了。

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
不是吧,你帮我看一下,毕老师java教学视频中关于多线程的内容——生产与销售,里面就没有使用 死循环来控制线程的生命周期
回复 使用道具 举报
本帖最后由 ヅ飞飞 于 2013-10-29 19:13 编辑

notify()唤醒的是线程池总最早被阻塞的线程,notifyAll唤醒所有阻塞线程。因为notify唤醒想成具有局限性(锁较多时,不能控制该唤醒的线程,有可能造成死锁),所以开发常使用notifyAll方法。
线程结束的唯一标志:run方法结束。
为提高安全性java没有提供杀死线程的方法,所以java程序员要通过控制run()方法来实现控制线程的结束。

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1 赞一个!

查看全部评分

回复 使用道具 举报
notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程(一般是最先开始等待的线程),而且不是按优先级。

run()方法没有循环参与的话,执行完后就终止了。有循环的话,只要符合循环条件,就会一直重复执行下去,直到不符合循环条件为止。
回复 使用道具 举报
To 金牌黑马 2013-10-30 00:11:37
地板
楼主你好,如果问题已解决请将帖子状态修改为提问结束,
如果未解决请继续追问,谢谢合作
修改方法请看解释帖:http://bbs.itheima.com/thread-89313-1-1.html
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马