黑马程序员技术交流社区

标题: 线程问题再问???? [打印本页]

作者: HM汪磊    时间: 2013-3-13 21:28
标题: 线程问题再问????
本帖最后由 HM汪磊 于 2013-3-13 22:49 编辑

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

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

怎么毕老师的课里说第一个进入线程池的线被唤醒呢??我都有点萌圈啦
作者: 陈丽莉    时间: 2013-3-13 22:42
HM汪磊 发表于 2013-3-13 22:37
怎么毕老师的课里说第一个进入线程池的线被唤醒呢??我都有点萌圈啦

第一个线程  和  第一个进入线程池的线程 当然不一样啦~  我觉得应该是进入线程池时,顺序会受优先级影响吧~  恩。。可以把这个疑问也加到帖子的问题中,看看有没有人解释得清晰透彻些~




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