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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

本帖最后由 HM汪磊 于 2013-3-12 12:47 编辑

看书时看到一句话:当CPU空闲时,如果就绪队列不空,队列中第一个具有最高优先级别的线程将执行。
一个队列中有若干个线程,比如:线程1,线程2,线程3,线程4。其中线程4优先级最低,线程1优先级最高。
疑问:队列有先进先出的原则, 当CPU空闲时,是先出队列但优先级低的线程4执行,还是后面的优先级高但是后出队列的线程1执行???


评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

4 个回复

倒序浏览
先进先出指的是优先级相同的情况,同一进程,线程是同步执行过程,线程的优先级别应该相同,不同的也只是cpu的分配执行的多少。因为,在开启线程时,它们共享资源。

要不然就不是同步的线程,容易出现异常。

面对不同程序,优先级别不同时,这两个线程会同时抢夺cpu执行权吧,没法比较,就没有先后之分。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
{:soso_e100:}
好,就让我来回答一下你的这个问题吧。

答:当CPU空闲时,就绪队列不为空(线程等候室不为空),严格意义上讲:

由于CPU的调度具有随机性,线程等候室中的每个线程都有可能从就绪状态得到

CPU的执行权后过渡到运行状态,优先级高的线程只不过将得到CPU调度的机率大,

但并非一定先运行,但通常情况下CPU会先调度线程等候室中的第一个线程。

这就如同对象调用 Object类中notify方法一样,它会唤醒线程等候室中的其中一个线程,

选择是任意性的(但通常唤醒等候室中的第一个线程)!

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1 恭喜25分~

查看全部评分

回复 使用道具 举报
线程有两种调度模型:分时调度模型和抢占式调度模型。
分时调度模型是指让所有的线程轮流获得cpu的使用权,并且平均分配每个线程占用的CPU的时间片。
java虚拟机采用抢占式调度模型,是指优先让可运行池中优先级高的线程占用CPU,如果可运行池中的线程优先级相同,那么就随机选择一个线程,使其占用CPU。处于运行状态的线程会一直运行,直至它不得不放弃CPU。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
如果觉得几位的回答满意,请将帖子分类改成篇【已解决】~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马