首页 理论教育 抢占式调度和分时调度模型对线程优先级、线程插队的影响

抢占式调度和分时调度模型对线程优先级、线程插队的影响

时间:2023-11-01 理论教育 版权反馈
【摘要】:线程调度通常有两种模型,分别是抢占式调度模型和分时调度模型。下面介绍线程优先级、线程插队对线程调度的影响。对于线程的调度,最直接的方式就是设置线程的优先级。图6-11线程join方法示例本例中,JVM启动main线程,main线程中又创建取钱线程,在运行取钱线程过程中,当账户余额为1元时,创建提示线程,并调用join方法插队,从效果看,提示线程执行完毕后才继续执行该取钱线程。

抢占式调度和分时调度模型对线程优先级、线程插队的影响

线程调度通常有两种模型,分别是抢占式调度模型和分时调度模型。Java使用的是抢占式调度模型,即按照线程优先级分配CPU时间片运行。在多线程开发中,可以通过控制线程状态变化来协调多个线程对CPU的占用。例如前面讲的线程休眠sleep()方法,让正在运行的程序进入阻塞状态,直到休眠时间结束再进入就绪状态;而线程让步yield()方法会让正在运行的线程直接进入就绪状态。下面介绍线程优先级、线程插队对线程调度的影响。

对于线程的调度,最直接的方式就是设置线程的优先级。Thread类public final void setPriority(int new Priority)用于更改线程的优先级。线程优先级用1~10的整数来表示,数字越大,优先级越高,即获得CPU执行的机会就越大。Thread类public final int getPriority()方法用于返回线程的优先级。

Thread类public final void join()throws Interrupted Exception方法提供了线程插队的功能,当某个线程中调用其他线程的join()方法时,调用该方法的线程将被阻塞,直到该join()方法加入的线程执行完毕才能解除阻塞。

【例6-4】

演示线程插队。

步骤1:在项目chapter6的src下新建cn.linaw.chapter6.demo02包,将cn.linaw.chapter6.demo01包下的Bank Account.java拷贝过来。

步骤2:新建一个提示任务类Pay Attention Task,如图6-9所示。

图6-9 提示任务Pay AttentionTask类(www.xing528.com)

步骤3:重新编写取钱任务Withdraw Money Task2类,如图6-10所示。

图6-10 取钱任务Withdraw MoneyTask2类

步骤4:下面通过测试用例ThreadJoin Test类来演示,如图6-11所示。

图6-11 线程join方法示例

本例中,JVM启动main线程,main线程中又创建取钱线程,在运行取钱线程过程中,当账户余额为1元时,创建提示线程,并调用join方法插队,从效果看,提示线程执行完毕后才继续执行该取钱线程。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈