Java零基础进阶篇之多线程详解(二)

​​​​​​本篇文章讲解的知识点主要围绕多线程,废话不多说,只分享Java相关的干货!

线程的调度与控制

通常我们的计算机只有一个CPU,CPU 在某一个时刻只能执行一条指令,线程只有得到CPU 时间片,也就是使用权,才可以执行指令。在单 CPU 的机器上线程不是并行运行的,只有在多个CPU 上线程才可以并行运行。Java 虚拟机要负责线程的调度,取得 CPU 的使用权,目前有两种调度模型:分时调度模型和抢占式调度模型,Java 使用抢占式调度模型。

分时调度模型:所有线程轮流使用CPU 的使用权,平均分配每个线程占用CPU 的时间片

抢占式调度模型:优先级高的线程获取 CPU 的时间片相对多一些,如果线程的优先级相同, 那么会随机选择一个

 

​​​​​​​线程优先级

线程 优 先 级 主 要分 三 种 :

  • MAX_PRIORITY( 最高级 );
  • MIN_PRIORITY (最低级) 
  • NOM_PRIORITY(标准)默认

Java零基础进阶篇之多线程详解(二)_第1张图片

Java零基础进阶篇之多线程详解(二)_第2张图片

Java零基础进阶篇之多线程详解(二)_第3张图片

从以上输出结果应该看可以看出,优先级高的线程(t1)会得到的 CPU 时间多一些,优先执行完成

 

​​​​​​​Thread.sleep

sleep 设置休眠的时间,单位毫秒,当一个线程遇到 sleep 的时候,就会睡眠,进入到阻塞状态, 放弃 CPU,腾出 cpu 时间片,给其他线程用,所以在开发中通常我们会这样做,使其他的线程能够取得CPU 时间片,当睡眠时间到达了,线程会进入运行状态,得到 CPU 时间片继续执行,如果线程在睡眠状态被中断了,将会抛出IterruptedException

【示例代码】

Java零基础进阶篇之多线程详解(二)_第4张图片

​​​​​​​Thread.yield、

它与sleep()类似,只是不能由用户指定暂停多长时间,并且 yield()方法只能让同优先级的线程有执行的机会

Java零基础进阶篇之多线程详解(二)_第5张图片

​​​​​​​t.join();

当前线程可以调用另一个线程的join 方法,调用后当前线程会被阻塞不再执行,直到被调用的线程执行完毕,当前线程才会执行

Java零基础进阶篇之多线程详解(二)_第6张图片

Java零基础进阶篇之多线程详解(二)_第7张图片

​​​​​​​interrupt(中断) 

如果我们的线程正在睡眠,可以采用interrupt 进行中断

Java零基础进阶篇之多线程详解(二)_第8张图片

Java零基础进阶篇之多线程详解(二)_第9张图片

​​​​​​​如何正确的停止一个线程

通常定义一个标记,来判断标记的状态停止线程的执行

Java零基础进阶篇之多线程详解(二)_第10张图片

Java零基础进阶篇之多线程详解(二)_第11张图片

以上就是多线程相关的知识点,持续更新中,配套视频教程,正在学习Java的同学们一定要关注哦~~

Java零基础进阶视频教程

 

 

 

 

你可能感兴趣的:(Java学习者入门必备,Java纯干货,Java学习视频教程)