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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© HM汪磊 高级黑马   /  2013-3-13 21:28  /  1235 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 HM汪磊 于 2013-3-13 22:49 编辑

唤醒线程池中的线程是先唤醒优先级高的还是先唤醒第一个线程??????
线程的优先级影响线程进入线程池的顺序吗???

4 个回复

倒序浏览
线程的优先级不能决定它是否被唤醒(在使用notify方法的情况下)或者在多线程环境下的唤醒顺序(在使用notifyAll方法的情况下)。因此,因此你永远不应该假设线程的唤醒顺序。另外,你也永远不应该对抢占过程中的线程调度做任何假设。线程调度是实现相关的(implementation-dependent),不同的平台的调度机制是不同的。如果你想你的程序具有可移植性就不应该做这样的不明智的假设。
  
  另外,notifyAll和notify方法没有提供唤醒等待进程的确定顺序,具体的顺序是依赖JVM的,并且notifyAll所能保证的事情不超过唤醒所有的等待线程。这个状况使得当你想以某种特定的顺序唤醒多个线程时会出现问题。
  
  有两种办法达到控制线程的唤醒顺序:
  
  1、使用精确唤醒模式
  
  (Specific notification pattern)
  
  2、使用实现了实时规范的JVM(RTSJ,Real-Time Specification for Java)(译者注:这其实不应该算一种好的方法,这加大了对特定JVM的依赖,打破了可移植性
回复 使用道具 举报
我记得有个类似的帖子来着,结论大概是随机性比较高。优先级高的和第一个线程,被唤醒的概率更大,但具体执行哪个还是cpu说了算。
回复 使用道具 举报
陈丽莉 发表于 2013-3-13 22:30
我记得有个类似的帖子来着,结论大概是随机性比较高。优先级高的和第一个线程,被唤醒的概率更大,但具体执 ...

怎么毕老师的课里说第一个进入线程池的线被唤醒呢??我都有点萌圈啦
回复 使用道具 举报
HM汪磊 发表于 2013-3-13 22:37
怎么毕老师的课里说第一个进入线程池的线被唤醒呢??我都有点萌圈啦

第一个线程  和  第一个进入线程池的线程 当然不一样啦~  我觉得应该是进入线程池时,顺序会受优先级影响吧~  恩。。可以把这个疑问也加到帖子的问题中,看看有没有人解释得清晰透彻些~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马