多线程扫盲篇

一:前言

多线程在java中具有举足轻重的地位,无论是平时开发中还是面试求职中,对多线程这一块的知识点考察都非常多的,本周我们将平时开发中、面试中常见的一些多线程知识进行梳理,让大家对这一块有更加深入的理解

二:多线程应用场景

2.1:多线程的定义

多线程是指在一个程序中同时运行多个线程,每个线程都是独立的执行流程,可以在同一时间内执行不同的任务,从而提高程序的并发性和效率。

2.2:多线程应用场景

1:后台任务,比如定时推送1000W+短信

2:异步计算,如发微博、记录日志、耗时计算

3:分布式计算,通过多线程实现分布在不同机器上的任务协同工作。

4:数据分析:对于大数据集的分析,由于单线程处理可能太慢,因此可能需要使用多线程来加速这个过程。

5:多步骤的任务处理:根据任务的不同阶段和特性,使用多线程来协调不同的任务流程。

2.3:多线程的意义

1:提高效率:通过多线程可以把任务分解成多个,每个线程之间互不干扰,提高整体效率

2:提高并发性和响应能力:Java多线程允许程序在同一时间执行多个任务,可以充分利用计算机的多核处理器,提高程序的性能和响应速度。

三:多线程的技术应用

3.1 java中的基础实现

通过继承Thread类或者实现Runnable接口实现多线程,案例代码如下

public class ReadingThread extends Thread{private String name;private Integer age;public ReadingThread(String name,Integer age){this.name=name;this.age=age;}@Overridepublic void run() {System.out.println("当前姓名:"+name+",age="+age);}
}public class ReadingThread extends Thread{private String name;private Integer age;public ReadingThread(String name,Integer age){this.name=name;this.age=age;}@Overridepublic void run() {System.out.println("当前姓名:"+name+",age="+age);}
}public class ReaddingCallable implements Callable<String> {@Overridepublic String call() throws Exception {return null;}
}public static void main(String[] args) {System.out.println(1<<30);ReadingThread thread=new ReadingThread("aa",100);thread.start();Thread.currentThread().setPriority(1);ReaddingRunnable readdingRunnable=new ReaddingRunnable("cc",200);Thread thread2=new Thread(readdingRunnable);thread2.start();ReaddingCallable callable=new ReaddingCallable();FutureTask futureTask=new FutureTask(callable);Thread thread3=new Thread(futureTask);thread3.start();Object result = futureTask.get();}

2.线程的生命周期

3:线程中的常用的函数说明

 Thread thread8=new Thread();//启动一个线程,thread8.start();//执行当前线程,并不会新开线程thread8.run();//java线程优先级设置 范围在1-10 1为最低 10为最高,默认创建是5,// cpu会按照优先级进行分配资源thread8.setPriority(5);//当前线程加入等待,等当前线程执行完毕,在执行主线程thread8.join();//设置中断状态,设置为已中断thread8.interrupt();//获取中断状态thread8.isInterrupted();//恢复中断状态Thread.interrupted();//如何优雅停止线程?一种常见的方法是使用中断机制Thread.sleep(100);

4:如何优雅停止线程

在Java中优雅地停止线程通常意味着让线程自愿停止执行,而不是使用强制(例如Thread.stop())方法。
class GracefulStoppable extends Thread {private volatile boolean running = true;@Overridepublic void run() {while (running) {// 执行任务// ...// 检查是否有中断请求if (Thread.currentThread().isInterrupted()) {// 清理资源或执行停止逻辑// ...break;}}}public void stopGracefully() {running = false;interrupt(); // 触发中断状态}
}public class Main {public static void main(String[] args) throws InterruptedException {GracefulStoppable thread = new GracefulStoppable();thread.start();// 执行其他操作...// 当需要优雅停止线程时thread.stopGracefully();thread.join(); // 等待线程终止}
}

四:多线程引申过来的知识点解析

五:多线程中的最佳实践

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

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

相关文章

AOP切面编程,以及自定义注解实现切面

AOP切面编程 通知类型表达式重用表达式切面优先级使用注解开发&#xff0c;加上注解实现某些功能 简介 动态代理分为JDK动态代理和cglib动态代理当目标类有接口的情况使用JDK动态代理和cglib动态代理&#xff0c;没有接口时只能使用cglib动态代理JDK动态代理动态生成的代理类…

【C++】template方法undefined reference to

这周本来要写几个前端的知识点&#xff0c;因为刚好最近接了一个前端的项目。但是这个有点复杂&#xff0c;自己还没学明白&#xff0c;没法写文章出来。就写一个这周开发遇到的问题。 另外吐槽 VS Code 提升了 SSH 需要的对方服务器的 linux 版本&#xff0c;都连不上了&…

自动驾驶---Motion Planning之Speed Boundary

1 背景 在上篇博客《自动驾驶---Motion Planning之Path Boundary》中,笔者主要介绍了path boundary的一些内容,通过将道路中感兴趣区域的动静态障碍物投影到车道坐标系中,用于确定L或者S的边界,并利用道路信息再确定Speed的边界,最后结合粗糙的速度曲线和路径曲线,即可使…

armv8/armv9不同特权程序之间的跳转模型

目录 1、前言2、4个特权等级/4个安全状态之间的跳转模型3、启动时镜像之间的跳转模型4、runtime程序之间的跳转模型推荐 本文转自 周贺贺&#xff0c;baron&#xff0c;代码改变世界ctw&#xff0c;Arm精选&#xff0c; armv8/armv9&#xff0c;trustzone/tee&#xff0c;secur…

【docker基础学习之】镜像构建

下面是在工作过遇到的一些实际例子&#xff0c;谨以此作为笔记参考 目录 1.背景2. 寻找方案3. 如何解决4.解决步骤4.1 DockerFile4.2 现在要做的 5. 镜像相关命令 1.背景 部署&#xff08;迁移&#xff09;项目时发现&#xff0c;项目的excel导出功能报错&#xff0c;错误如下…

html--彩虹马

文章目录 htmljscss 效果 html <!DOCTYPE html> <html lang"en" > <head> <meta charset"UTF-8"> <title>Rainbow Space Unicorn</title> <link rel"stylesheet" href"css/style.css"> &l…

2024 再战基金

这是一场长时间的拉锯战&#xff0c;刚提交了初稿&#xff0c;等学校审查&#xff0c;再坚持10天&#xff0c;今年的申报任务结束。 很长时间&#xff0c;自己都不愿意动笔&#xff0c;因为确实没有好的idea&#xff0c;无法凝练科学问题&#xff0c;更想当一名踏实的工程师&a…

qsort函数的使用及其模拟实现

一.基本介绍 注意&#xff1a;qsort函数是默认从小到大排序 二、qsort 函数的使用 1.排序数组 int compare(const void* e1, const void* e2) {return *(int*)e1 - *(int*)e2;//强制类型转换 }int main() {int arr[10] { 44,5,34,56,42,90,43,1,52,98 };int num sizeof(…

nextjs link跳转 和 window.location.href 跳转的区别

Next.js 的 next/link 组件和浏览器原生的 window.location.href 之间的跳转在功能上都实现了页面跳转&#xff0c;但它们之间存在一些重要的区别&#xff0c;特别是在 Next.js 这样的服务端渲染&#xff08;SSR&#xff09;或静态站点生成&#xff08;SSG&#xff09;框架中。…

ubuntu18.04下zookeeper安装与简单使用

下载与解压 官网下载地址 Apache ZooKeeper 解压 tar -zxvf zookeeper-3.4.10.tar.gz 环境准备 zookeeper基于java开发&#xff0c;因此首先需要安装java的jdk包 sudo apt-get install openjdk-8-jdk修改配置 进入解压目录里的conf文件夹内 mv zoo_sample.cfg zoo.cfg …

【R语言爬虫实战】抓取省市级城市常务会议内容

&#x1f349;CSDN小墨&晓末:https://blog.csdn.net/jd1813346972 个人介绍: 研一&#xff5c;统计学&#xff5c;干货分享          擅长Python、Matlab、R等主流编程软件          累计十余项国家级比赛奖项&#xff0c;参与研究经费10w、40w级横向 文…

win11家庭版docker和milvus

docker 1、官网下载docker文件Get Started | Docker&#xff0c;选择download for windows下载。 2、双击打开下载好的文件Docker Desktop Installer.exe&#xff0c;add shortcut to desktop选择√代表同意添加快捷键到桌面&#xff0c;如果不勾选就说明不创建快捷键&#x…

分布式锁从0到1落地实现01(mysql/redis/zk)

1 准备数据库表 CREATE TABLE user ( id bigint(20) NOT NULL COMMENT 主键ID, name varchar(30) DEFAULT NULL COMMENT 姓名, age int(11) DEFAULT NULL COMMENT 年龄, email varchar(50) DEFAULT NULL COMMENT 邮箱, PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8;I…

基于SpringBoot的教务管理系统

1&#xff0e;引言 1.1编写目的 教务管理系统是完成学生管理、用户管理、校建管理、课程管理、教师管理、成绩管理、校内新闻、选课管理和教评管理九大管理模块&#xff0c;由教务工作人员系统给管理员、教师、以及学生多用户角色&#xff0c;各用户依据自己角色的不同而操作…

【前端】vscode快捷键和实用Api整理

vscode的快捷键 创建a.html 生成模板 !回车 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" …

AI写真,太火了

昨天晚上&#xff0c;AI大佬吴东子直播讲解了AI写真项目&#xff0c;说21点破局星球会准时放出预约链接&#xff0c;结果21点星球直接崩溃了&#xff0c;只能说这个项目太火爆了 经过星球授权&#xff0c;这里把整个项目的SOP截取一部分给到大家&#xff0c;完整的SOP太长了&am…

Python基础学习(7)函数作用域与名称空间

文章目录 一.认识函数对象1.函数被引用2.函数作为元素3.函数可以作为参数和返回值 二,名称空间1.内建名称空间(存放内置函数)2.全局名称空间(Python定义在外层的名字)3.局部名称空间(存在函数内定义的名字) 三,作用域1.global 提权2.nonlocal 降权 四,匿名函数 Python基础学习(…

数据库(一)初步认识数据库系统

什么是数据库&#xff1f; 表&#xff1a;以按行按列形式组织及展现的数据 如下便是一个表&#xff0c;也叫关系&#xff0c;描述了一批相互有关联关系的数据 数据库&#xff1a;起源于规范化表&#xff08;如成绩单&#xff09;的处理&#xff0c;简称DB&#xff0c;是相互有…

【计算机视觉】图像处理算法(形态学滤波篇)

来源&#xff1a;《OpenCV3编程入门》&#xff0c;怀念毛星云大佬&#x1f56f;️ 说明&#xff1a;本系列重点关注各种图像处理算法的原理、作用和对比 形态学滤波(1 ):腐蚀与膨胀 形态学槪述 数学形态学的概念&#xff1a; 数学形态学(Mathematical morphology)是立在格论…

git push 跟 git push origin master的区别

git push 和 git push origin master 在功能和使用上存在显著的区别。 git push 命令默认会推送当前分支到其对应的远程分支。这个操作是基于你的本地仓库配置进行的&#xff0c;它会自动识别你当前所在的分支以及该分支对应的远程仓库和远程分支。例如&#xff0c;如果你在 f…