线程的调度

本文介绍了Java虚拟机中线程的两种调度模型:分时调度模型和抢占式调度模型。详细阐述了线程优先级的设定及影响,并介绍了线程的休眠、让步、插队等操作方法。此外,还解释了线程间的通信机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java虚拟机会按照特定的机制为程序中每个线程分配CPU的使用权,这种机制被称为线程的调度

线程的调度有两种模型:分时调度模型和抢占式调度模型。
分时调度模型是指让所有的线程轮流获得cpu的使用权,并且平均分配每个线程占用的CPU的时间片。
抢占式调度模型是指优先让可运行池中优先级高的线程占用CPU,如果可运行池中的线程优先级相同,那么就随机选择一个线程,使其占用CPU。

线程的优先级

0到10整数表示优先级。0最低,10最高。(UNIX刚好相反)。其中 public static final int MIN_PRIORITY = 1;
public static final int NORM_PRIORITY = 5;
public static final int MAX_PRIORITY = 10;

线程优先级可以用 setPriority(int newPriority)来改变。

线程的休眠

public static void sleep(longmillis) throws InterruptedException
public static void sleep(long millis,int nanos)throws InterruptedException
在指定的毫秒数加指定的纳秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。该线程不丢失任何监视器的所属权。

线程的让步

public static void yield()
暂停当前正在执行的线程对象,并执行其他线程。

线程的插队

public final void join(long millis,int nanos)throws InterruptedException
等待该线程终止的时间最长为 millis 毫秒 + nanos 纳秒。 若没有参数或者参数为0,表明要一直等下去

线程的通信

public final void wait(long timeout,int nanos)throws InterruptedException
在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量前,导致当前线程等待。

public final void notify()
唤醒此同步锁上等待的第一个调用wait()的线程

public final void notifyAll()
唤醒此同步锁上调用wait()的所有线程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值