Java:Thread类
创始人
2024-11-14 01:07:18
0

Thread的常见构造方法

在这里插入图片描述

Thread的常见属性

在这里插入图片描述

  • ID 是线程的唯一标识,不同线程不会重复
  • 名称是在使用各种调试工具时会用到的
  • 状态表示线程当前所处的情况
  • 优先级高的线程理论上来说更容易被调度到
  • 关于后台线程,需要记住:JVM会在一个进程的所有非后台线程结束后,才会结束运行
  • 是否存活,即run方法是否运行结束,为true表示内核的线程存在,为false表示内核的线程无了

代码中创建的new Thread 对象的生命周期和内核中实际的线程的生命周期是不一定一样的.可能会出现Thread对象存在,但是内核中的线程不存在了这样的情况(但是不会出现Thread对象不存在,线程还存在这种).比如在调用start之前,内核中还没有创建线程呢~再比如线程的run执行完毕了,内核中的线程就无了,但是Thread对象仍然存在.

后台线程 & 前台线程

后台线程: 如果这个线程执行过程中,不能阻止进程结束,这样的线程就是"后台线程"(也叫做守护线程).

  1. 进程要结束(前台线程要结束),我无力阻止
  2. 后台线程先结束了,不影响进程的结束(其他前台线程的结束)

前台线程: 如果某个线程在执行的过程中,能够阻止进程结束,此时这个线程就是"前台线程"

  1. 前台线程宣布结束,此时进程就结束,后台线程也会随之结束
  2. 前台线程不宣布结束,后台线程结束了也不影响.

线程的核心操作

创建线程

一个经典的面试题: start 和 run 的差别

  • run: 描述了线程要执行的任务,也可以称为"线程的入口".
  • start: 调用系统函数,真正在系统内核中创建线程(创建PCB,加入到链表中)

调用start,不一定非得是main线程调用,任何的线程都可以创建其他线程; 一个Thread对象,只能调用一次start,如果多次调用start就会出现问题(一个Thread对象,只能对应系统中的一个线程)

线程的终止

假如有两个线程: A 和 B, B 正在运行,A想让B结束.
其实核心就是A要想办法让B的run方法执行完毕,此时B就自然结束了.而不是说,B的run执行一半,A直接把B强制结束了.

Java 中,结束线程是一个更"温柔"的过程,不是直接粗暴的,主要就是怕,B的某个工作执行了一半被强制结束,此时B对应的结果数据是一个"半成品".不是我们想要的.

怎么用代码实现线程的终止呢?
答: interrupted

public static void main(String[] args) throws InterruptedException {         Thread t = new Thread(() -> {             // 先获取到线程的引用            Thread currentThread = Thread.currentThread();             while (!currentThread.isInterrupted()) {                System.out.println("hello thread");                try {                    Thread.sleep(1000);                } catch (InterruptedException e) {                    return;                }            }         });          t.start();         Thread.sleep(3000);          // 在主线程中,控制t线程终止,设置标志位         t.interrupt();     } 

Thread类里有一个成员,就是interrupted ,它是boolean 类型的.初始情况下是false,未被终止.

需要注意的是:

  1. interrupt 方法能够设置标志位,也能够唤醒sleep等阻塞方法.但是要先获取到线程的引用.
  2. sleep 被唤醒之后,会把标志位清空.

为啥要这么做呢?
答: 给程序员更多的操作空间.

  1. 如果B线程想无视A,就直接在catch中啥都不做,此时B线程仍然会执行
  2. 如果B线程想立即结束,就直接在catch中写上return或者break,此时B线程就会立即结束
  3. 如果B线程想稍后结束,就可以在catch中写上一些其他的逻辑(比如 释放资源,清理一些数据,提交一些结果…收尾工作),等这些逻辑完成后,再进行return / break.

本文到这里就结束啦~

相关内容

热门资讯

今日公布!WePoKe透明挂,... 今日公布!WePoKe透明挂,太坑了确实真的是有挂(2026已更新)(哔哩哔哩);致您一封信;亲爱W...
交流学习经验“德扑之心透视辅助... 交流学习经验“德扑之心透视辅助”(透视)详细开挂辅助方法在的世界里,玩家们追求的不仅是技巧和运气,还...
黑科技辅助(微扑克苹果版)外挂... 黑科技辅助(微扑克苹果版)外挂软件透明挂智能ai代打辅助软件(透视)揭秘攻略(2023已更新)(哔哩...
第3分钟了解!瑞安玉海楼茶苑辅... 第3分钟了解!瑞安玉海楼茶苑辅助器插件开挂,微信微乐小程序修改器软件透视挂(最新版本2026)1、每...
8分钟透视挂!小闲川南手游辅助... 8分钟透视挂!小闲川南手游辅助器,超凡辅助app链接(微信链接拼三张辅助开挂方法)进入游戏-大厅左侧...
热点推荐!德州ai辅助神器ap... 热点推荐!德州ai辅助神器app,太坑了从前真的有挂(2022已更新)(哔哩哔哩);详细德州ai辅助...
记者发布“WePoKer有没有... 记者发布“WePoKer有没有透视软件挂”(透视)详细开挂辅助技巧在使用WePoKer时,启用透视功...
七分钟了解!九九联盟辅助插件开... 七分钟了解!九九联盟辅助插件开挂,混沌休闲有没有挂软件透视挂(最新版本2026)1、起透看视 混沌休...
黑科技辅助(微扑克挂)外挂软件... 《黑科技辅助(微扑克挂)外挂软件透明挂智能ai辅助器安装(透视)解说技巧(2024已更新)(哔哩哔哩...
第十分钟透视挂!微信西楚辅助,... 第十分钟透视挂!微信西楚辅助,蜜瓜大厅辅助下载(微信链接炸金花辅助开挂攻略)1、首先打开蜜瓜大厅辅助...