线程常用方法及常见状态

news2024/11/14 20:47:48

终止线程

应该怎么终止一个线程呢?

  1. 当线程完成任务时。

  1. 通过使用变量来控制run方法退出的方式停止线程,即通知方式。

这里详细介绍一下2的方式。

在A线程依靠变量循环跑的过程ing,主线程通过修改A线程的变量,来控制线程终止。

为A线程中的变量设置set方法,来修改掉循环条件,从而让run方法走向结束。

所以在A线程想要B线程退出怎么办呢?

在A线程中通知B线程,控制B线程的变量,通知它退出即可。


线程常用方法

  1. 设置名称 get,setName

  1. 设置优先级 get,setPriority

  1. 中断线程 interrupt(不会真正结束线程,所以一般用于中断正在休眠线程)

  1. 调用线程 start,run

  1. 线程礼让 yield静态方法(让出CPU,让其他线程执行,不一定礼让成功)

  1. 线程插队 join(一旦A线程插队成功,则先执行完A线程所有,再继续执行B线程剩下的,相当于阻塞B线程)


线程守护

  1. 用户线程(工作线程):普通线程

  1. 守护线程:所有用户线程结束,守护线程自动退出(GC机制)

怎么把一个普通线程变成守护线程?

线程名称.setDaemon(true);

先设置完守护线程,再start方法启动。


线程的7个状态

(此图源于韩顺平老师B站课程)


线程同步机制

在多线程编程中,有一些敏感数据不应该被多个线程同时访问,此时应该使用同步访问技术,保证数据在任何时刻,最多只能有一个线程访问,保证数据的完整性。

同步具体方法:Synchronized(也可以称之为互斥锁)

非静态同步方法的锁对象默认是this,也可以是其他对象(要求是同个对象)。

静态同步方法的锁对象默认为当前类.class。

步骤

  1. 分析需要上锁代码

  1. 选择同步代码块或同步方法(尽量为同步代码块,范围小,效率高)

  1. 要求多个线程锁的对象为同一个即可!


线程死锁

线程之间都占用了对象的锁资源,需要互相返回值才肯相让,才导致了死锁。

举个栗子:

两个人打架。

小明:你先松开手,我再松开

我:你先松开手,我才松开

(此图源于韩顺平老师B站课程)


释放锁

以下操作会释放锁:

  1. 当前线程的同步方法,同步代码块执行完毕

  1. 当前线程的同步方法,同步代码块遇到break,return

  1. 当前线程的同步方法,同步代码块出现异常

  1. 当前线程的同步方法,同步代码块执行线程对象的wait方法,当前线程暂停,并释放锁

以下操作不会释放锁:

  1. 调用Thread.sleep方法,Thread.yield方法暂停当前线程的执行(休眠多久,外面的线程就会等多久)

2.其他线程调用了该线程的suspend方法将该线程挂起(suspend和resume方法已被废弃)

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

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

相关文章

SpringBoot配置文件详解

简介 SpringBoot全局配置文件默认为src/main/resources下的application.properties,后缀可以改为yml, 如果application.yml和application.properties两个配置文件都存在,那么,properties优先级更高 官网(Spring Boot 全部配置项)&…

01_kobject和ktype创建设备文件和设备目录

总结:创建设备文件的方法 设备文件属性指的是 /sys/yyy/xxx yyy:代表这个设备的目录 xxx:代表这个驱动设备的各种属性,我们可以直接操控属性来控制这个设备 比如之前常见的 echo 5 > /sys/led/brightness 直接操作这个属性来更改led的亮度 1 创建设备kobj对象,绑定目录 k…

C语言中不定参数 ... 的语法、函数封装

文章目录Intro语法测试依赖库新函数使用测试:遍历并打印不定参数中的值用两种方式封装函数:对多个int值求和总结Intro 有一天看C代码看到某个方法有这样的定义:在函数形参列表处,有...的写法,就像Java中的不定参数那样…

JDK8 新特性之Stream流方法详解

目录 一:集合处理数据的弊端 二:Stream流式思想概述 小结 : 三:获取Stream流的两种方式 方式1 : 根据Collection获取流 方式2 : Stream中的静态方法of获取流 小结 四:Stream常用方法和注意事项 Stream常用方法…

19. 函数基础知识详解

1. 什么是函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。之前文章中我们已经使用过python提供的内建函数,比如print()。但你也可以自己创建函数…

【JUC并发编程】线程池及相关面试题 详解

【JUC并发编程】线程池及相关面试题 详解 参考资料: 第十二章 线程池原理 深入浅出Java多线程原理 两道面试题,深入线程池,连环17问 深入理解Java并发编程之线程池、工作原理、复用原理及源码分析 硬核干货:4W字从源码上分析JUC…

Java二叉树OJ题

目录1. 检查两颗树是否相同2. 另一颗树的子树3. 翻转二叉树4. 判断一颗二叉树是否是平衡二叉树4.1 时间复杂度为O(n*n)【从上而下递归】4.2 时间复杂度为O(n)【从下而上递归】5. 对称二叉树6. 二叉树的构建及遍历7. 二叉树创建字符串8. 两个指定节点的最近公共祖先8.1 指定结点…

java入门作业-DAO,读取sql数据库

DAO意思是数据库、访问、对象。有了前后端思想。 需要下载mysql,并下载链接自己设置好密码。可以在navicat等软件链接打开。 材料是jc0122.sql,里面的admin_info是要操作的表。不像上一节需要把数据库文件放到java目录里。数据库只要在本地即可。 一、…

浅析Spring的五大类注解和方法注解

简单的将bean对象存储到Spring容器中,可以使用五大类注解实现,也可以通过Bean方法注解实现。本文重点围绕这几个问题展开:1.为什么需要五大类注解?2.五大类注解之间有没有关系?3.Spring使用五大类注解生成beanName问题…

Linux常见命令 17 - 帮助命令 man,whatis,--help,info,help

目录 1. 查看命令/配置文件帮助信息 man 2. 查看简短的命令帮助信息 whatis 3. 查看简短的命令选项信息 --help 4. 另一查看命令文件帮助信息 info 5. Shell内置帮助命令 help 1. 查看命令/配置文件帮助信息 man [1] 语法:man [命令] 示例:如果想要查…

分享129个ASP源码,总有一款适合您

ASP源码 分享129个ASP源码,总有一款适合您 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下..., 129个ASP源码下载链接:https://pan.baidu.com/s/1dUPOSf1BudsK-bB4FnGXfQ?pwdg3ae 提取码&#x…

黑马2021-8Vue自学笔记hm

黑马2021-8Vue教程学习笔记 文章目录黑马2021-8Vue教程学习笔记代码和笔记不断更新gitee代码仓库地址备用前端gei忽略提交文件webpack的使用初始化包管理配置文件 package.json下载webpack解决问题dependencies 和 devDependencies区别:在项目中配置webpackWebpack 中的默认约定…

python基础——列表推导式

python基础——列表推导式 文章目录python基础——列表推导式一、实验目的二、实验原理三、实验环境四、实验内容五、实验步骤一、实验目的 掌握Python数据结构:列表推导式的用法。 二、实验原理 列表推导式(list comprehension)列表推导式…

【Python百日进阶-Web开发-Linux】Day235 - Win11的WSL2中安装Docker

文章目录一、Docker是什么二、Win11安装Docker2.1 官网下载2.2 系统要求🔗2.2.1 WSL 2 后端2.2.2 Hyper-V 后端和 Windows 容器2.2.3 关于 Windows 容器2.3 在 Windows 上安装 Docker Desktop2.3.1 交互式安装2.3.2 从命令行安装2.4 启动 Docker 桌面三、WSL2的Ubun…

ConcurrentHashMap的死循环问题

文章目录前言1. 情景复现2. 源码解析3. 代码调试4. 原因5. 解决前言 对于ConcurrentHashMap来说,能保证多线程下的安全问题,但是在JDK1.8中还是会出现一个bug,就是computeIfAbsent,下面就来详细说说死循环的原因 1. 情景复现 首…

进阶C语言 第二章-------《进阶指针》 (指针数组、数组指针、函数指针、回调指针)知识点+基本练习题+深入细节+通俗易懂+完整思维导图+建议收藏

绪论 书接上回,通过对数据类型进阶的认识,你肯定对各种数据类型在内存中如何存储有了了解。虽然说,这方面可能对你的编程能力没什么进步。但是,他是一本内功秘籍,当我们遇到了这方面的问题时我们可以知道可能是哪一方面…

使用 Grafana 请求API接口

目的: 使用Grafana 配合JSON API 插件 请求API接口,完成可视化,实现一些简单的请求功能 假设我们想将如下的API接口返回的json数据可视化 这里借用一下 小熊同学的 金融数据接口 用请求如下接口举例 https://api.doctorxiong.club/v1/fund/detail?code000001&startDat…

色环电容读数方法要点总结

🏡《电子元器件学习目录》 目录 1,概述2,读数方法3,颜色对照表3.1,颜色与电容值数字对照关系表3.2,颜色与10的指数数字对照关系表3.3,颜色与误差对照关系表4,总结1,概述 本文简单介绍色环电容的读数方法。 2,读数方法 如下图所示色环电容共有四个色环。最粗的被命名…

36.Isaac教程--复合消息

复合消息 ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html 文章目录复合消息测量类型使用复合消息的示例手臂关节速度基本轨迹命令手臂关节和末端执行器命令CompositeMetric 和 CompositeAtlas组件使用 CompositeMetric 计算距离在 Python 脚本中创…

使用bookdown构建新年日记本

简介 一年多前在 B 站发布了一个视频,预览了一下基于 bookdown 构建的日记本。本打算之后更个文字版本教程。结果一直忘了,最近通过一位读者的了解,打算把这个坑补上。 本文内容将展示如何使用 bookdown 模板并修改成自己的日记本。此外&…