本篇文章讲解的知识点主要围绕多线程,废话不多说,只分享Java相关的干货!
线程的调度与控制
通常我们的计算机只有一个CPU,CPU 在某一个时刻只能执行一条指令,线程只有得到CPU 时间片,也就是使用权,才可以执行指令。在单 CPU 的机器上线程不是并行运行的,只有在多个CPU 上线程才可以并行运行。Java 虚拟机要负责线程的调度,取得 CPU 的使用权,目前有两种调度模型:分时调度模型和抢占式调度模型,Java 使用抢占式调度模型。
分时调度模型:所有线程轮流使用CPU 的使用权,平均分配每个线程占用CPU 的时间片
抢占式调度模型:优先级高的线程获取 CPU 的时间片相对多一些,如果线程的优先级相同, 那么会随机选择一个
线程优先级
线程 优 先 级 主 要分 三 种 :
- MAX_PRIORITY( 最高级 );
- MIN_PRIORITY (最低级)
- NOM_PRIORITY(标准)默认
从以上输出结果应该看可以看出,优先级高的线程(t1)会得到的 CPU 时间多一些,优先执行完成
Thread.sleep
sleep 设置休眠的时间,单位毫秒,当一个线程遇到 sleep 的时候,就会睡眠,进入到阻塞状态, 放弃 CPU,腾出 cpu 时间片,给其他线程用,所以在开发中通常我们会这样做,使其他的线程能够取得CPU 时间片,当睡眠时间到达了,线程会进入可运行状态,得到 CPU 时间片继续执行,如果线程在睡眠状态被中断了,将会抛出IterruptedException
【示例代码】
Thread.yield、
它与sleep()类似,只是不能由用户指定暂停多长时间,并且 yield()方法只能让同优先级的线程有执行的机会
t.join();
当前线程可以调用另一个线程的join 方法,调用后当前线程会被阻塞不再执行,直到被调用的线程执行完毕,当前线程才会执行
interrupt(中断17f37)
如果我们的线程正在睡眠,可以采用interrupt 进行中断
如何正确的停止一个线程
通常定义一个标记,来判断标记的状态停止线程的执行
以上就是多线程相关的知识点,持续更新中,配套视频教程👇,正在学习Java的同学们一定要关注哦~~
Java零基础进阶视频教程