SpringBoot多线程

永线程池就不会内存泄漏,否则一直创建线程了(如果业务量大很危险了,中断报警…?)

【@EnableAsync实现异步任务,简单用法】-CSDN博客

两种方法:

1、在启动类上加@EnableAsync注解(@Async默认的线程池是SimpleAsyncTaskExecutor)

1.SimpleAsyncTaskExecutor,不是真的线程池,这个类不重用线程,每次调用都会创建一个新的线程,没有最大线程数设置。并发大的时候会产生严重的性能问题。

创建新线程、无限、不重用。这和我们印象中的的线程池不一样,可以说是相悖的,完美躲过线程池优势。

线程池的优势:

降低创建线程和销毁线程的性能开销。
提高响应速度,当有新任务需要执行是不需要等待线程创建就可以立马执行。
合理的设置线程池大小可以避免因为线程数超过硬件资源瓶颈带来的问题。


2.在Java中创建线程并不便宜,线程对象占用大量内存,在大型应用程序中,分配和取消分配许多线程对象会产生大量内存管理开销。
                        
原文链接:Spring默认线程池SimpleAsyncTaskExecutor-CSDN博客

2、在需要实现异步的方法上加@Async(如果加在类上,那么类中全部方法都实现异步,建议加载具体需要实现异步的方法上)

二、使用自定义线程池(推荐)

1、新建一个自定义线程池配置类@Configuration(配合bean)

2、方法上用到@Async注解需要指定线程池的Bean名字(如果配置了一个线程池,直接用@Async就会用自定义线程池执行,如果有多个线程池配置,需要指定自定义线程池的Bean名字,否则@Async会使用默认的线程池SimpleAsyncTaskExecutor处理)

 

 

SpringBoot开启异步多线程_springboot 异步线程-CSDN博客

这个就是推荐用法了

失效原因之一(要注意):

在同一个类中,一个方法调用另外一个有注解(比如@Async,@Transational)的方法,注解失效的原因和解决方法_java async调用了两次-CSDN博客

了解了失效的原因,解决的方法就简单了(两种):
1.把这两个方法分开到不同的类中;
2.把注解加到类名上面(这个类所有方法may都有注解的效果了..);

java常用多线程(如果不用上面注解,一般都用线程池&实现Callable接口重写call()方法实现多线程):

java 多线程实现的三种方式区别_java 多线程区别-CSDN博客

如下就是实战用的:

import java.util.concurrent.Callable;public class MyCall implements Callable<Long> {private int num;private String threadName;private long result;public MyCall(int num, String threadName) {this.threadName = threadName;this.num = num;}public Long call() throws Exception {for (int i = 0; i < num; i++) {result += i;}return result;}
}// 线程池方式测试import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;public class ThreadPool {public static void main(String[] args) throws ExecutionException, InterruptedException {MyCall myCall_1 = new MyCall(10, "call_1");MyCall myCall_2 = new MyCall(10000, "call_2");ExecutorService service = Executors.newFixedThreadPool(5);Future<Long> f1 = service.submit(myCall_1);Future<Long> f2 = service.submit(myCall_2);System.out.println(f1.get());    // 获取返回System.out.println(f2.get());    // 获取返回service.shutdown();}
}

 

 

java小语法:

9485d837d0164206948ecf8ae65b85ef.png
package thread;:这行代码声明了当前文件中的类属于 thread 包。包的作用是将相关的类和接口组织在一起,便于管理和避免命名冲突。但是实际不属于这个包,没必要硬来

线程快慢输出问题:(笔试题)

java多线程顺序输出_java: 第1关:顺序输出-CSDN博客

这个文章用到了join知识:java中join方法的理解和说明_5.join方法内部使用了()。(2分)aisaliveb.isdaemoncisactiv-CSDN博客

java 中的 join() 方法在多线程中会涉及到,这个方法最初理解起来可能有点抽象,用一两次大概就懂了。简单说就是当前线程等待调用join方法的线程结束才能继续往下执行

54d96b183a7b4438b4e0d9d1e443ed20.png

这相当于同时启动

-------------------

Java子线程和主线程交替输出(一个简单的实例)_java主线程中start另一个线程,是继续主线程结果输出完马上输出另一个线程-CSDN博客

 

线程同步知识(见到在学了):

java 中轻量级volatile同步字段解释_java 同步字段-CSDN博客

java 的 synchronized 同步方法使用场景举例解读_java 全局缓存采用synchronized示例-CSDN博客

 

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

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

相关文章

Linux——五种IO模型

目录 一IO基本理解 二五种IO模型 1五种IO模型示意图 2同步IO和异步IO 二非阻塞IO 1fcntl 2实现非阻塞IO 三多路复用 1select 1.1定位和作用 1.2介绍参数 1.3编写多路复用代码 1.4优缺点 2poll 2.1作用和定位 2.2介绍参数 2.3修改select代码 3epoll 3.1介绍…

[论文阅读]SimCSE: Simple Contrastive Learning of Sentence Embeddings

SimCSE&#xff1a;句子嵌入的简单对比学习 SimCSE: Simple Contrastive Learning of Sentence Embeddings http://arxiv.org/abs/2104.08821 EMNLP 2021 文章介绍了SimCSE&#xff0c;这是一种简单的对比学习框架&#xff0c;采用了自监督来提升模型的句子表示能力 而自监…

【网络原理】——图解HTTPS如何加密(通俗简单易懂)

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯 你们的点赞收藏是我前进最大的动力&#xff01;&#xff01; 希望本文内容能够帮助到你&#xff01;&#xff01; 目录 一&#xff1a;HTTP为什么不安全 二&#xff1a;HTTPS加密过程 1&#xff1a;密码学中的概念 &…

apt的编译安装(古老通讯)

Ubuntu系统的防火墙关闭&#xff1a; ufw disable 第一步&#xff1a;Ubuntu 安装依赖环境 apt -y install libpcre3-dev zlib1g-dev libssl-dev build-essential 如果出现无法下载则在末尾处假如 --fix missing如下图所示 出现下图则为安装成功 第二步&#xff1a; useradd…

上市公司企业数字金融认知数据集(2001-2023年)

一、测算方式&#xff1a;参考C刊《经济学家》王诗卉&#xff08;2021&#xff09;老师的做法&#xff0c;数字金融认知使用每万字年报描述中包含的对数字金融相关关键词的提及次数&#xff0c;关键词为&#xff1a;互联网、数字化、智能、大数据、电子银行、金融科技、科技金融…

LivePortrait——生成可拼接和重定向控制的高效肖像动画翻译

文章目录 原文翻译Abstract1. Introduction2. Related Work2.1. Non-diffusion-based Portrait Animation2.2. Diffusion-based Portrait Animation 3. Methodology3.1. Preliminary of Face Vid2vid3.2. Stage I: Base Model Training3.3. Stage II: Stitching and Retargetin…

快来免费参加交通领域重量级会议:第十三届交通运输研究(上海)论坛

一、会议简介 交通运输研究&#xff08;上海&#xff09;论坛&#xff08;简称为TRF&#xff09;是按照国际会议的组织原则&#xff0c;为综合交通运输领域学者们构建的良好 合作交流平台。交通运输研究&#xff08;上海&#xff09;论坛已经成功举办了十二届&#xff0c;凝聚了…

zabbix 6.0 监控clickhouse(单机)

zabbix 6.0 LTS已经包含了clickhouse的监控模板&#xff0c;所以我们可以直接使用自带的模板来监控clickhouse了。 0.前置条件 clickhouse 已经安装&#xff0c;我安装的是24.3.5.47zabbix-agent 已经安装并配置。系统是ubuntu 2204 server 1. 新建监控用户 使用xml的方式为…

RabbitMQ替换默认端口

前提&#xff1a;客户通过漏洞扫描&#xff0c;发现rabbitmq中的erlang是默认端口4369&#xff0c;出于安全的考虑&#xff0c;需要将erlang的端口修改为其他的端口。 1.查看默认erlang的默认端口 netstat -plnt | grep 4369 2.关闭rabbitmq rabbitmqctl stop&#xff08;注…

Linux上配置NFS服务

架设一台NFS服务器&#xff0c;并按照以下要求配置&#xff1a; 1、开放/nfs/shared目录&#xff0c;供所有用户查询资料&#xff1a; 2、开放/nfs/upload目录&#xff0c;为192.168.xxx.0/24网段主机可以上传目录&#xff0c;并将所有用户及所属的组映射为nfs-upload,其UID和…

MySQL数据库MHA高可用

目录 一、MHA简述 二、MHA 的组成 三、MHA 的特点 四、MHA工作原理 五、MHA部署步骤 六、搭建 MySQL MHA MHA一主两从高可用集群示意图 实验环境 1. Master、Slave1、Slave2 节点上安装 mysql5.7 2. 关闭防火墙 3. 修改 Master、Slave1、Slave2 节点的主机名 4. 修…

docker build cache 占用磁盘空间很高

一、查看docker 构建缓存占用空间 二、清理 三、查看

优选算法专题一 ——双指针算法

&#x1f308;个人主页&#xff1a;小新_- &#x1f388;个人座右铭&#xff1a;“成功者不是从不失败的人&#xff0c;而是从不放弃的人&#xff01;”&#x1f388; &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd; &#x1f3c6;所属专栏&#xff1…

敢为人先 创世富尔是如何引领磁性元件磁集成技术风向的

【哔哥哔特导读】2021年便已实现车载OBC磁集成产品的量产&#xff0c;创世富尔将如何通过磁集成技术改变电源行业生态&#xff0c;并确立自身的领先优势&#xff1f; 自2023年新能源汽车厂商开启价格战以来&#xff0c;这波内卷逐渐蔓延至所有终端领域&#xff0c;加上上游材料…

Google如何做医疗大模型(Med-Gemini)

1. 前言 开发垂直领域模型的方法有好几种&#xff0c;其中医疗、法律等专业是比较能体现模型垂直行业能力的&#xff0c;因此也深受各大厂商的重视。 五一小长假的第一天&#xff0c;Google在Arxiv上发布了《Capabilities of Gemini Models in Medicine 》 ( https://arxiv.o…

虚拟光驱软件 PowerISO v8.7.0 中文激活版

PowerISO 是一款虚拟光驱工具及强大的光盘映像文件制作工具。支持创建、编辑、提取、压缩、加密和转换ISO/BIN图像文件。同时自带DISM工具&#xff0c;支持ESD/ISO/WIM/ESD格式转换&#xff0c;制作镜像文件制作U盘启动&#xff0c;支持ISO/BIN/IMG/DAA/WIM等各种常见文件类型。…

【简历】25届湖南某专升本JAVA简历:项目名称不要过份搞笑!!

注&#xff1a;为保证用户信息安全&#xff0c;姓名和学校等信息已经进行同层次变更&#xff0c;内容部分细节也进行了部分隐藏 另外&#xff1a;我们出这一系列校招简历指导的原因&#xff0c;就是看很多学生被忽悠&#xff0c;没有先定位大厂、中厂还是小公司&#xff0c;导…

目前最新最好用 NET 混淆工具 .NET Reactor V6.9.8

目前最新最好用 NET 混淆工具 .NET Reactor V6.9.8 1、.NET Reactor V6.9.8 功能简介2、官方下载 1、.NET Reactor V6.9.8 功能简介 业界领先的源代码保护 .NET Reactor通过多种方法来防止反编译&#xff0c;这些方法会将 .NET 程序集转换为任何现有工具都无法反编译的进程。…

Android Activity 属性 TaskAffiity、allowTaskReparenting

Activity未设置taskAffinity属性 页面跳转顺序 MainActivity -> StandardActivity -> SingleTopActivity-> SingleTaskActivity-> SingleInstanceActivity-> SingleInstancePerTaskActivity MainActivity 标准启动模式 StandardActivity 标准启动模式 SingleTo…

PPT批量替换字体

1.【开始】➡【查找】➡【替换字体】。 2.在弹窗内选择替换字体&#xff0c;和想要换成的字体&#xff0c;设置好点击【替换】&#xff0c;然后点击【关闭】或者左上角的小【】。 3.可以检查一下&#xff0c;每一页的【宋体】或者其他字体&#xff0c;都被改成了【微软雅黑】…