线程基础、状态及常用方法

news2024/11/25 12:52:58

多线程基础

进程和线程 

  • 什么是程序?

    • 程序是包含有计算机指令和数据的文件。

  • 什么是进程?

    • 进程是程序的一次执行过程,是计算机分配资源的最小单位。

  • 什么是线程?

    • 一个进程中会包含若干个线程,每个线程都是一个独立的执行单位。

 JVM进程

一个JVM进程中包含若干个线程

  • main:主线程 (子线程1、2、3)
  • Reference Handler:清理线程
  • Finalizer:执行finalize()方法的线程

线程基本概念 

  • 单线程:单线程就是进程中只有一个线程。单线程在程序执行时,所走的程序路径按照连续顺序排下来,前面的必须处理好,后面的才会执行。
  • 多线程:由一个以上的线程组成的程序称为多线程程序。Java中,一定是从主线程开始执行(main方法),然后在主线程的某个位置创建并启动新的线程。

线程的启动与创建

  • 通过创建Thread实例,完成线程的创建
    • 线程的内部实现可以通过继承Thread类、实现Runnable接口等方式进行封装。
  • 通过调用Thread实例的start()方法启动新线程

线程的创建方式

  • 创建线程的方式只有一种,创建一个Thread对象;
  • 实现线程执行逻辑的方式有四种:
    • 继承Thread类,重写run()方法;
    • 实现Runnable接口,实现run()方法;
    • 实现Callable接口,实现call()方法;
    • 创建线程池,向线程池提交线程任务(Runnable或Callable);

 线程的命名

生产环境中,为了排查问题方便,建议在创建线程的时候指定一个合理的线程名字

  • 调用父类的setName()方法或在构造方法中给线程名字赋值;
  • 如果没有为线程命名,系统会默认指定线程名,命名规则是Thread-N的形式

线程的休眠(暂停)

在线程中,可以通过调用 Thread.sleep(long millis) ,强迫当前线程按照指定毫秒值休眠。

线程的优先级

  • 在线程中,通过setPriority(int n)设置线程优先级,范围是1-10默认为 5 
  • 优先级高的线程被操作系统调度的优先级较高(操作系统对高优先级线程,调度更频繁)
  • 注意:并不能代表,通过设置优先级来确保高优先级的线程一定会先执行

小结 

  • Java用Thread对象表示一个线程,通过调用start()启动一个新线程;
  • 一个线程对象只能调用一次start()方法;
  • 线程的执行代码写在run()方法中;
  • 线程调度由操作系统决定,程序本身无法决定调度顺序;
  • Thread.sleep()可以把当前线程暂停一段时间。

线程的状态 

线程的状态有哪些? 

  • NEW:初始状态,线程被构建,但还没有调用start()方法;
  • RUNNABLE:运行状态,调用start()方法后进入RUNNABLE状态,表示当前线程处于运行(就绪或运行);
  • BLOCKED:阻塞状态,表示当前线程阻塞;
  • WAITING:等待状态,表示线程进入等待状态,需要通过notify()或notifyAll()方法通知唤醒;
  • TIME_WAITING:计时等待状态,该状态通过时间值自动唤醒;
  • TERMINATED:终止状态,表示当前线程已经执行完毕;

线程的生命周期? 

  • 线程创建之后它将处于 NEW(初始状态),调用 start() 方法后,线程开始运行,线程这时候处于 READY(就绪状态)。当就绪状态的线程获得了cpu时间片后,就处于 RUNNING(已运行状态)。Java线程模型使用RUNNABLE来表示就绪和已运行两种状态;

  • 当线程调用同步方法时,在没有获取到锁的情况下,线程将会进入到BLOCKED(阻塞状态);

  • 当线程执行 wait()或join()方法之后,线程进入 WAITING(等待) 状态。

    • 进入等待状态的线程需要依靠其他线程的通知,执行了notify()或notifyAll()方法后,线程将会返回到 RUNNABLE 状态;

  • 当线程执行了sleep(long millis)方法或 wait(long millis)方法后,线程进入 TIMED_WAITING (计时等待),计时等待状态相当于在等待状态的基础上增加了超时限制。

    • 当计时到达后,线程将会返回到 RUNNABLE 状态;

  • 线程在执行完成后,将会进入到 TERMINATED(终止状态)。

线程的插队:join( )方法

通过join()方法实现线程的插队,调用完毕后会释放锁。

  • join()方法的实现

    • wait()方法

      • 让当前线程处于等待状态

      • 执行结束后,会自动notify唤醒

    • synchronized锁

线程的中断

通过interrupt()方法,改变中断状态值,并通过抛出一个InterruptedException异常,中断线程执行

线程的让出

基于操作系统的线程抢占模型,线程会通过yield( ) 实现当前线程对CPU时间的让出

守护线程(Daemon Thread)

用户线程与守护线程的区别

  • 用户线程:我们平常创建的普通线程;
  • 守护线程:用来服务于用户线程的线程,在JVM中,所有非守护线程都执行完毕后,无论有没有守护线程,虚拟机都会自动退出;而守护线程执行结束后,虚拟机不会自动退出。

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

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

相关文章

OpenCV图像文件读写(2) 检查 OpenCV 是否支持某种图像格式的写入功能函数haveImageWriter()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 haveImageWriter 函数用于检查 OpenCV 是否支持某种图像格式的写入功能。这个函数可以帮助开发者在编写代码时确定是否可以成功地将图像写入特定…

【Linux】Linux基本命令

目录 文件和目录操作: ls cd pwd cp mv rm mkdir rmdir touch clear history which/whereis 文件查看和编辑: cat less head tail vi 或 vim sz/rz echo 系统信息和管理: su uname hostname df free top ps ki…

fopen与fwrite在C语言中写文件及open、write的对比

fopen与fwrite在C语言中写文件及open、write的对比 一、fopen与fwrite写文件1. fopen函数介绍2. fwrite函数介绍3. 示例代码4. 注意事项二、open与write写文件1. open函数介绍2. write函数介绍3. 示例代码4. 注意事项三、fopen/fwrite与open/write的对比1. 跨平台性2. 功能与灵…

android和ios双端应用性能的测试工具

1.工具介绍 基于日常工作的需要,开发了一款新的android和ios端应用性能测试工具,本工具在数据测试方面与所流行的工具没有区别。欢迎下载使用体验。 本工具为筋斗云,工具说明 本工具无侵入,不需要root,低延迟…

统一建模语言(UML)在软件研发过程中常用图接受:类图、用例图、时序图、状态图、活动图、流程图、顺序图

UML具有许多不同类型的图表,包括: 静态图:用例图、类图、对象图、组件图、部署图动态图:活动图、状态图、时序图(又叫顺序图、序列图)、协作图 软件工程(软件工程中的各种图一般用于以下三个阶段…

线上报名小程序怎么做

在这个数字化、智能化的时代,信息技术的发展正以前所未有的速度改变着我们的生活。无论是学习、工作还是娱乐,互联网都成为了我们不可或缺的一部分。而在线上报名这一领域,小程序的出现更是为广大用户带来了前所未有的便捷与高效。今天&#…

# 高可用的并发解决方案nginx+keepalived(四)

高可用的并发解决方案nginxkeepalived(四) 一、Keepalived安装 1、keepalived 介绍 Keepalived 是一种高性能的服务器高可用或热备解决方案,Keepalived 可以用来防止服务器单点故障的发生,通过配合 Nginx 可以实现 web 前端服务…

SOMEIP_ETS_134: SD_Option_Length_ends_past_Options_Array_Var_A

测试目的: 验证DUT能够处理一个其选项长度超出所指示的选项数组长度的SubscribeEventgroup消息,并以SubscribeEventgroupNAck作为响应或完全忽略该请求。 描述 在变体A中,通过将SOME/IP头部中指示的总长度从60字节略微减少到48字节&#x…

Tomcat后台弱口令部署war包

1.环境搭建 cd /vulhub/tomcat/tomcat8 docker-compose up -d 一键启动容器 2.访问靶场 点击Manager App tomcat8的默认用户名和密码都是tomcat进行登录 3.制作war包 先写一个js的一句话木马 然后压缩成zip压缩包 最后修改后缀名为war 4.在网站后台上传war文件 上传war文件…

MySQL基础篇 - SQL

01 SQL通用语法 02 SQL分类 03 DDL语句 04 DML语句 05 DQL语句(单表查询) 05_01 学习总览 05_02 基本查询 05_03 条件查询 【应用实例】: 05_04 聚合函数 05_05 分组查询 05_06 排序查询 05_07 分页查询 【boss题目】: 05_08 执行顺序 06 DCL语句 【概…

Google发布改进型Gemini 1.5 系列AI模型 并将API价格降低50%

Google今天发布了两款可投入生产环境的更新版Gemini 1.5 型号:Gemini-1.5-Pro-002 和 Gemini-1.5-Flash-002。与五月份发布的原版 Gemini 1.5 型号相比,这两款新产品略有改进。 更新后的 Gemini 1.5 系列模型在 MMLU-Pro 基准成绩提高了约 7%&#xff0c…

UNI-SOP认证系统的定位

目前市面上的认证开发框架比较多,比如SA-TOKEN、SHIRO以及SPRING集成的Oauth2等都是比较优秀的认证授权框架,还有像若依这样比较完整的带有后台一些常用功能的开发框架,诸如这些认证授权开发框架都集成了用户的登录授权功能,他们可…

C语言长度受限制的字符串函数:(strncpy,strncat,strncmp)

strncpy 重点&#xff1a;1.拷贝num个字符从源字符串到目标空间 2.如果源字符串的长度小于num&#xff0c;则拷贝完源字符串之后&#xff0c;在目标的后边追加0&#xff0c;直到num个 3.这个函数不会拷贝\0。 列子&#xff1a; #include<stdio.h> #include<string…

vcruntime140_1.dll无法继续执行代码怎么办,总结6种解决方法

在计算机编程和软件开发中&#xff0c;我们经常会遇到各种错误和问题。其中&#xff0c;vcruntime140_1.dll无法继续执行代码是一个常见的问题。这个问题可能会导致程序崩溃&#xff0c;影响我们的工作进度。因此&#xff0c;了解这个问题的原因以及如何解决它是非常重要的。 …

点云与Open3D入门

文章目录 点云数据介绍点云 Open3D点云基础操作RGBD转换为PCDPLY转PCD 点云空间搜索K-DTree原理搜索算法 OCTree 点云滤波体素下采样点云体素化复杂点云体素化统计滤波半径滤波 点云特征提取法线估计 点云分割DBSCAN 聚类分割&#xff08;运行时间较长&#xff09;PANSNC平面分…

Tableau|二 如何利用功能区创建视图

一 认识 Tableau 数据 1.数据角色 维度和度量是Tableau的一种数据角色划分&#xff0c;离散和连续是另一种划分方式。 1.维度和度量 维度往往是一些分类、时间方面的定性字段&#xff0c;将其拖放到功能区时&#xff0c;Tableau不会对其进行计算&#xff0c;而是对视图区进行分…

什么开放式耳机好用?2024五款地表最强机型推荐!

随着耳机使用的普及&#xff0c;选择一款合适的耳机变得尤为重要。入耳式耳机虽然普遍&#xff0c;但长时间佩戴可能会带来不适&#xff0c;甚至可能影响耳道健康。开放式耳机提供了一个折中的选择&#xff0c;它们不堵塞耳道&#xff0c;允许用户在享受音乐的同时&#xff0c;…

Android线程使用总结

Android线程使用总结 1. Threading Performance 在程序开发的实践当中&#xff0c;为了让程序表现得更加流畅&#xff0c;我们肯定会需要使用到多线程来提升程序的并发执行性能。但是编写多线程并发的代码一直以来都是一个相对棘手的问题&#xff0c;所以想要获得更佳的程序性…

基于主从Reactor模型实现高并发服务器

目录 1. 项目简介1.1 环境介绍1.2 项目定位1.3 功能模块整体划分 2. Reactor简介2.1 Reactor模型分析2.2 多Reactor多线程分析&#xff1a;多I/O多路复用线程池&#xff08;业务处理&#xff09; 3. 日志宏的编写4. Server模块4.1 Buffer模块4.1.1 Buffer的功能4.1.2 Buffer的实…

腾讯邮箱上传附件卡、慢、无法上传问题处理

1、检查文件中转站容量是否已满 2、建议用户打开链接https://exmail.qq.com/qy_mng_logic/wasmHelper?typehashv2&#xff0c;看是否可以正常访问。&#xff08;能打开下载就表示可以正常访问&#xff09; 3、让用户切换到4G或者其他网络再重新上传附件是否会重现问题&#xf…