多线程-Thread类及常见方法

目录

1.什么是Thread类

1.1Thread 的常⻅构造⽅法

 1.2 Thread 的⼏个常⻅属性

 2.启动⼀个线程 - start()

经典面试题:start 和run 区别

3.中断⼀个线程

方法一:

 方法二:

4.等待⼀个线程 - join()


1.什么是Thread类

       Thread类是Java编程语言中的一个重要类,用于支持多线程编程。它是java.lang包中的一部分,提供了创建和管理线程的方法和功能。通过使用Thread类,可以同时执行多个任务,实现并行处理。每个线程都有独立的执行路径,可以在不同的时间段内独立运行。这使得程序能够更高效地利用计算机的资源,并提高应用程序的响应速度。

        Thread类提供了许多方法来管理线程的行为,例如start()方法用于启动线程,join()方法用于等待线程的结束,sleep()方法用于暂停线程的执行等等。此外,还可以使用isAlive()方法检查线程是否处于活动状态。

1.1Thread 的常⻅构造⽅法

Thread t1 = new Thread ();
Thread t2 = new Thread ( new MyRunnable ());
Thread t3 = new Thread ( "线程 名字 " );
Thread t4 = new Thread ( new MyRunnable (), "线程 名字 " );

 1.2 Thread 的⼏个常⻅属性

 ID 是线程的唯⼀标识,不同线程不会重复

 名称是各种调试⼯具⽤到

 状态表⽰线程当前所处的⼀个情况

优先级⾼的线程更容易被调度到

关于后台线程:前台线程,会阻止进程结束。后台线程,不会阻止进程结束。JVM会在⼀个进程的所有⾮后台线程结束后,才会结束运⾏。
是否存活,即简单的理解,为 run ⽅法是否运⾏结束了
一般来说,在线程的run()方法中,可以通过检查线程的中断标志位来判断线程是否应该中断。如果线程应该中断,则应该适当地结束线程的执行,释放占用的资源,以及清除中断标志位,防止后续影响线程的执行。

 2.启动⼀个线程 - start()

       调用start创建出来新的线程。本质是start会调用系统的api,来完成创建线程的操作。

package 多线程;public class ThreadDemo5 {public static void main(String[] args) {Thread t = new Thread(() ->{while (true){try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}});t.start();}
}

注意:Thread类使用start方法,启动一个线程。对于同一个Thread对象来说,start只能调用一次!!!

package 多线程;public class ThreadDemo5 {public static void main(String[] args) {Thread t = new Thread(() ->{while (true){try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}});t.start();t.start();//第二次调用start会出错}
}

 它就会报错,意思是非法的线程状态异常。

经典面试题:
start 和run 区别

package 多线程;class MyThread4 extends Thread{@Overridepublic void run() {System.out.println("hello");}
}public class ThreadDemo6 {public static void main(String[] args) {Thread t = new MyThread4();//t.start();//这个操作是创建一个新的线程,由新的线程执行hellot.run();//这个操作还是在main主线程种打印的hello}
}

 虽然他们打印的都是hello但是本质是不同的。

3.中断⼀个线程

方法一:

中断一个线程就是让线程提前结束,我们引入一个标志位。

package 多线程;public class ThreadDemo7 {private static boolean isQuit = false;//引入一个标志位public static void main(String[] args) {Thread t = new Thread(()->{while (!isQuit) {System.out.println("正在工作中!");try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}//当前是死循环,给一个提示。System.out.println("线程工作完毕!");});t.start();try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("t线程结束");isQuit = true;}
}

 我们就可以让一直运行的线程提前结束。

具体线程什么时候结束,取决于在另一个线程中何时修改isQuit的值

 方法二:

Thread对象,内置了变量。

package 多线程;public class ThreadDemo8 {public static void main(String[] args) throws InterruptedException{Thread t = new Thread(()->{while (!Thread.currentThread().isInterrupted()){//获取当前线程实例System.out.println("正在工作");try {Thread.sleep(1000);} catch (InterruptedException e) {
//                    e.printStackTrace();//加上break,此时抛出异常之后,线程也会结束。break;}}System.out.println("线程执行完毕");});t.start();Thread.sleep(3000);System.out.println("t线程结束");//使用interrupt方法来修改刚才的标志位t.interrupt();}
}

4.等待⼀个线程 - join()

       join()是Thread类提供的一个方法,用于等待线程的结束。当调用一个线程的join()方法时,当前线程会被阻塞,直到目标线程执行完毕。

        具体来说,当一个线程A调用另一个线程B的join()方法时,线程A会暂停执行,直到线程B执行完毕。这样可以保证线程的执行顺序和协调性。

package 多线程;public class ThreadDemo9 {public static void main(String[] args) throws InterruptedException {Thread t = new Thread(()->{for (int i = 0; i < 5; i++) {System.out.println("一个线程正在工作。。。");try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}System.out.println("线程结束");});t.start();t.join();System.out.println("这是主线程,希望在t线程后打印");}
}

希望大家多多支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/636656.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图像去噪——CTNet网络推理测试(详细图文教程)

目录 一、CTNet二、源码包准备2.1 测试集2.2 模型权重 三、环境准备四、推理测试4.1 配置参数修改4.2 官网测试4.2.1 测试当通道图像4.2.1.1 命令方式测试4.2.1.2 Configuration配置测试4.2.1.3 测试结果 4.2.2 测试彩色图像4.2.2.1 命令方式测试4.2.2.2 Configuration配置测试…

性能优化-HVX架构简介

来自 「发表于知乎专栏《移动端算法优化》」 本文主要介绍Hexagon DSP的HVX技术&#xff0c;旨在通过简单的语言讲清HVX技术。 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;高性能&#xff08;HPC&#xff09;开…

Elasticsearch 入门向使用

文章目录 ElasticSearch简介倒排索引安装(单节点)分词器kibana与Mysql概念上的对比索引库CRUD文档CRUDDSL查询相关性算分Function Score Query自定义算分Boolean Query 搜索结果处理排序分页高亮 数据聚合 aggregations自动补全数据同步集群 ElasticSearch 简介 Elasticsearc…

轻松掌握AI辅助设计微信红包封面并快速过审

【无矶之谈】轻松使用AI设计微信红包封面/动态封面并快速过审 关注本公众号梦无矶测开实录&#xff0c;2024年1月21日之后关注最新的文章&#xff0c;后台回复封面红包&#xff0c;即可免费领取本号专属微信红包封面。&#xff08;目前我过审的有五个封面&#xff0c;其中一个…

vue项目执行依赖安装(npm i或npm install )报ls-remote -h -t异常

从git拉取的vue项目执行依赖安装时一直报错&#xff0c; 报错如下图&#xff1a;首先&#xff0c;查看了node版本、npm配置的镜像地址均没找到解决办法。 在命令行中直接输入git发现提示于是从网上搜到了一个博文https://blog.csdn.net/weixin_49159364/article/details/118198…

仰暮计划|“每天清晨五六点钟,爷爷早早起床去田地里采摘蔬菜”

★ 我的奶奶出生于1955年&#xff0c;在我眼里是十分伟大的女性。身处在有六个兄弟姐妹的大家庭里&#xff0c;她从小就肩负起了照顾家人的重任。充满朝气的她&#xff0c;在上学和照顾弟弟妹妹之间穿梭。然而&#xff0c;在她将要上小学五年级的时候&#xff0c;文化大革命的爆…

[绍棠] docxtemplater实现纯前端导出word

1.下载需要的依赖 2.util文件夹下创建doc.js文件 doc.js import docxtemplater from docxtemplater import PizZip from pizzip import JSZipUtils from jszip-utils import { saveAs } from file-saver import ImageModule from "docxtemplater-image-module-free"…

力扣hot100 最长有效括号 动态规划

Problem: 32. 最长有效括号 文章目录 思路Code 思路 &#x1f468;‍&#x1f3eb; 参考题解 Code ⏰ 时间复杂度: O ( n ) O(n) O(n) &#x1f30e; 空间复杂度: O ( n ) O(n) O(n) class Solution {public int longestValidParentheses(String s){int n s.length();…

Python武器库开发-武器库篇之Fofa-API使用(四十六)

Python武器库开发-武器库篇之Fofa-API使用(四十六) FOFA&#xff08;FOcus Observation of Futures Assets&#xff09;是一款专业的网络资产搜索引擎&#xff0c;旨在帮助企业发现和评估网络上的潜在安全风险。FOFA的基本原理是通过搜索引擎的方式&#xff0c;按照关键词对互…

【Redis】更改redis中的value值

今天继续进步一点点~~ 背景&#xff1a;今天有个前端的同事问我&#xff0c;能不能在Redis中他本人登录公众号的 sessionID 加上一列openID 于是我上网查了一堆在Redis里面的命令&#xff0c;以及不同的客户端怎么输入命令&#xff0c;但是后来问了下同事&#xff0c;他就给我…

PDshell16逆向PostgreSQL 工程显示字段comment备注

现状&#xff1a;当刚逆向成功的表结构是没有原来表结构中的&#xff0c;comment备注如下 然后pd逆向工程的sql已经返回了这个备注的含义 解决方案&#xff1a; 1、设置显示注释列 tools——Display Preferences…如下 勾选-按照下面得方式勾选这三个 复制这里的VBS脚本&a…

OpenVINS学习7——评估工具的简单使用

前言 OpenVINS自带评估工具&#xff0c;这里记录一下使用方法&#xff0c;我是以VIRAL数据集为例&#xff0c;但是目前仍然有问题&#xff0c;发现误差很大&#xff0c;我还没搞明白哪里出了问题。 工具介绍 主要参考 https://docs.openvins.com/eval-error.html https://bl…

Windows和Linux访问不了GitHub的解决方法

一、Windows访问不了GitHub 问题描述 使用Windows访问GitHub时&#xff0c;出现如下情况&#xff0c;显示无法访问。 解决方案&#xff1a; 打开域名查询网站&#xff1a;https://tool.chinaz.com/dns 输入GitHub的域名&#xff0c;点击立即检测。 出现如下页面&#xff0c…

实验五 PLSQL编程

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的很重要&…

git设置代理

git设置代理 git config --global http.proxy 127.0.0.1:7890git查询代理 git config --global http.proxy git取消代理 git config --global --unset http.proxy

【核心复现】基于改进鲸鱼优化算法的微网系统能量优化管理matlab

目录 一、主要内容 1 冷热电联供型微网系统 2 长短期记忆网络(Long Short Term Memory, LSTM) 3 改进鲸鱼优化算法 二、部分代码 三、运行结果 四、下载链接 一、主要内容 该程序为《基于改进鲸鱼优化算法的微网系统能量优化管理》matlab代码&#xff0c;主要内容如下&…

事件驱动架构

请求驱动 服务注册&#xff0c;服务发现&#xff0c;虽然调用地址隐藏了&#xff0c;但是调用stub必须相同。 rpc通信&#xff0c;远程调用。 生产者和消费者要有相同的stub存根。 消费者和生产者的调用接口是耦合的。 事件驱动 核心&#xff1a;上下游不进行通信 中间通过M…

Ubuntu安装最新版Docker和Docker-Compose

ubuntu环境搭建专栏&#x1f517;点击跳转 Ubuntu系统环境搭建&#xff08;十&#xff09;——Ubuntu安装最新版Docker和Docker Compose 文章目录 Ubuntu系统环境搭建&#xff08;十&#xff09;——Ubuntu安装最新版Docker和Docker Compose1.添加Docker库1.1 安装必要的证书并…

实验六 模式对象管理与安全管理

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的很重要&…

Qt5.15.2中加入图片资源

系列文章目录 文章目录 系列文章目录前言一、加入图片资源二、代码 前言 以前用的Qt5.15.2之前的版本&#xff0c;QtCreator默认的工程文件是*.pro&#xff0c;现在用5.15.2创建工程默认的工程文件是CMameList.txt,当然在创建项目时&#xff0c;仍然可以使用pro工程文件用QtCr…