首页 > 编程语言 >Java:Thread类

Java:Thread类

时间:2024-08-04 12:53:06浏览次数:15  
标签:run Thread start 线程 结束 Java 内核

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.

本文到这里就结束啦~

标签:run,Thread,start,线程,结束,Java,内核
From: https://blog.csdn.net/qrwitu142857/article/details/140881787

相关文章

  • Java 文件 I/O流详解
    文件文件操作是Java开发中一个重要的组成部分,它允许开发者对文件进行读取,写入,创建,删除和修改等操作,文件操作的主要通过java.io包中的类来实现的,其中的File类更是文件操作的核心类File类的常用方法创建文件或目录文件创建使用createNewFile();可以创建一个新的空文......
  • JavaScript 中 arguments 对象与剩余参数的对比及转换
    引言在JavaScript中,处理函数调用时传递的不同数量的参数是一项常见的任务。为此,JavaScript提供了两种不同的方法:arguments对象和剩余参数(RestParameters)。本文将探讨这两种方法的区别,并介绍如何将arguments对象转换为真正的数组。arguments对象vs.剩余参数arguments......
  • JavaEE 第1节 认识多线程
    本节目标(全是重点,都必须掌握)1、了解什么是线程、多线程、进程以及他们之间的关系2、了解多线程的优势以及各种特性3、用Java掌握多种创建线程的方法一、线程、多线程、进程1、概念1.基本概念这三个名词的概念可以用一个餐馆的厨房和厨师来进行超级形象的比喻。想象一下......
  • Java简单宠物系统案例和代码实现(控制台输出 “推荐小白练习”)
    文章目录案例要求1.主程序入口2.用户注册3.用户登录4.宠物管理界面5.寄养宠物6.领养宠物7.查看宠物列表8.退出程序注意事项代码实现1.数据结构定义Account.javaPet.java2.功能实现Main.java案例要求1.主程序入口初始化:创建账号数组和宠物数组来......
  • Java计算机毕业设计酒店管理系统(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着旅游业的蓬勃发展和消费者对住宿体验要求的不断提升,酒店业面临着前所未有的挑战与机遇。传统的手工管理模式已难以满足现代酒店对效率、准确性和......
  • Java计算机毕业设计农商对接系统(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着农业现代化和电子商务的迅猛发展,农产品销售的传统模式正面临深刻变革。传统农产品流通链条长、环节多、信息不对称等问题日益凸显,导致农产品销售......
  • Java计算机毕业设计旅游度假村管理系统(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着旅游业的蓬勃发展,旅游度假村作为集休闲、度假、娱乐于一体的综合性旅游目的地,其管理与服务质量的提升成为行业关注的焦点。传统的人工管理模式已......
  • Java计算机毕业设计绿色生鲜(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着人们生活水平的提高和健康意识的增强,绿色生鲜食品逐渐成为现代消费者餐桌上的新宠。然而,传统生鲜市场面临着信息不对称、供应链冗长、品质难以保......
  • javabasic笔记----分支语句
    分支语句--ifif单分支语句语法:        //....前置代码        if(codition){           //code1        }        //....后续代码如果codition返回true, 就执行code1,继续执行后续代码如果codition返回false,就跳过......
  • 在C#中使用 System.Threading.Timer 实现定时任务
    在C#中使用System.Threading.Timer实现定时任务(qq.com)   前言在编写应用程序过程中,高效的任务调度都是必不可少的,无论是在实现后台服务、自动化任务或者定期数据处理。在.NET中,System.Threading.Timer类提供了一种强大而简单的方法来计划任务以特定时间间隔运行。本......