springboot开发案例之多任务并行+线程池处理

     2022-03-29     350

关键词:

技术分享图片

前言

前几篇文章着重介绍了后端服务数据库和多线程并行处理优化,并示例了改造前后的伪代码逻辑。当然了,优化是无止境的,前人栽树后人乘凉。作为我们开发者来说,既然站在了巨人的肩膀上,就要写出更加优化的程序。

  • SpringBoot开发案例之JdbcTemplate批量操作

  • SpringBoot开发案例之CountDownLatch多任务并行处理

改造

理论上讲,线程越多程序可能更快,但是在实际使用中我们需要考虑到线程本身的创建以及销毁的资源消耗,以及保护操作系统本身的目的。我们通常需要将线程限制在一定的范围之类,线程池就起到了这样的作用。

程序逻辑

技术分享图片

多任务并行+线程池处理.png

一张图能解决的问题,就应该尽可能的少BB,当然底层原理性的东西还是需要大家去记忆并理解的。

Java 线程池

Java通过Executors提供四种线程池,分别为:

  • newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。

  • newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。

  • newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。

  • newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。

优点

  • 重用存在的线程,减少对象创建、消亡的开销,性能佳。

  • 可有效控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞。

  • 提供定时执行、定期执行、单线程、并发数控制等功能。

代码实现


方式一(CountDownLatch)

技术分享图片


方式二(Future)

技术分享图片

技术分享图片

执行时间

以上代码,均是伪代码,下面是2000+个学生的真实测试记录。

技术分享图片


在这里呢小编给大家推荐一个免费提升Java技术学习好地方,课程涵盖了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo/Kafka、Hadoop、Hbase、Flink等高并发分布式、大数据、机器学习等技术。

转送门:https://ke.qq.com/course/293193?flowToken=1002121


java面试之多线程

35.并行和并发有什么区别?并行:多个处理器或多核处理器同时处理多个任务。并发:多个任务在同一个CPU核上,按细分的时间片轮流(交替)执行,从逻辑上来看那些任务是同时执行。如下图:并发=两个队列和一台咖啡机。并行... 查看详情

java面试之多线程

35.并行和并发有什么区别?并行:多个处理器或多核处理器同时处理多个任务。并发:多个任务在同一个CPU核上,按细分的时间片轮流(交替)执行,从逻辑上来看那些任务是同时执行。如下图:并发=两个队列和一台咖啡机。并行... 查看详情

ios开发底层之多线程探索-19(代码片段)

文章目录前言一、进程与线程?1.进程2.线程3.进程与线程的关系二、多线程1.多线程优点2.多线程缺点3.线程的生命周期4.线程池的饱和策略RejectedExecutionHandler接口5.优先级翻转(IOvccpu优先级提升)6.优先级的影响因素三.多线程下... 查看详情

ios开发底层之多线程探索-19(代码片段)

文章目录前言一、进程与线程?1.进程2.线程3.进程与线程的关系二、多线程1.多线程优点2.多线程缺点3.线程的生命周期4.线程池的饱和策略RejectedExecutionHandler接口5.优先级翻转(IOvccpu优先级提升)6.优先级的影响因素三.多线程下... 查看详情

ios开发底层之多线程探索-19(代码片段)

文章目录前言一、进程与线程?1.进程2.线程3.进程与线程的关系二、多线程1.多线程优点2.多线程缺点3.线程的生命周期4.线程池的饱和策略RejectedExecutionHandler接口5.优先级翻转(IOvccpu优先级提升)6.优先级的影响因素三.多线程下... 查看详情

springboot开发之多线程理解单例研究线程池学习和项目运行问题解决

springboot多线程问题和单例相关研究一直以来对springboot中的多线程和并发的实际应用没有进行一个深入的了解,今天对相关的知识进行了学习和验证(基于springboot2.x)。总结如下:controller、service、repository默认都是单例形式... 查看详情

python网络编程之多任务版tcp服务端程序开发

 一、需求目前我们开发的TCP服务端程序只能服务于一个客户端,如何开发一个多任务版的TCP服务端程序能够服务于多个客户端呢?完成多任务,可以使用线程,比进程更加节省内存资源。二、具体实现步骤编写一个TCP服务端... 查看详情

java高级之多线程

1.1,多线程的作用:  *线程是程序执行的一条路径,一个进程中可以包含多条线程  *多线程并发执行可以提高程序的效率,可以同时完成多项工作1.2,多线程的应用场景:  *红蜘蛛同时共享屏幕给多个电脑   *迅雷开启多条... 查看详情

爬虫之多线程案例

多线程糗事百科案例案例要求参考上一个糗事百科单进程案例Queue(队列对象)Queue是python中的标准库,可以直接importQueue引用;队列是线程间最常用的交换数据的形式python下多线程的思考对于资源,加锁是个重要的环节。因为pytho... 查看详情

python多任务之多线程开发(代码片段)

目录1线程的介绍2多线程的使用2.1导入线程模块2.2线程类Thread参数说明2.3启动线程2.4多线程完成多任务的代码2.5小结3线程执行带有参数的任务3.1线程执行带有参数的任务的介绍3.2args参数的使用3.3kwargs参数的使用3.4小结4线程的注... 查看详情

py西游攻关之多线程(threading模块)

线程与进程什么是线程(thread)?线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行... 查看详情

springboot开发案例之整合quartz任务管理系统

...统,适用于中小项目。开发环境JDK1.7、Maven、Eclipse技术栈SpringBoot1.5.2、thymeleaf、quartz2.3.0、iview、vue、layer、AdminLTE、bootstrap启动说明项目使用的数据库为MySql,选择resources/sql中的tables_mysql_innodb.sql 查看详情

python之多任务编程线程

一、线程概述1.线程的介绍在Python中,想要实现多任务除了使用进程,还可以使用线程来完成,线程是实现多任务的另外一种方式。2.线程的概念线程是进程中执行代码的一个分支,每个执行分支(线程)要想工作执行代码需要cp... 查看详情

c#多线程开发-任务并行库

你好,我是阿辉。正文共2090字,预计阅读时间:6min。之前学习了线程池,知道了它有很多好处。使用线程池可以使我们在减少并行度花销时节省操作系统资源。可认为线程池是一个抽象层,其向程序员隐藏了... 查看详情

并行开发-paraller(代码片段)

并行开发的概念并行开发要做的事情就是将任务分摊给硬件线程去并行执行来达到负载和加速,传统的代码都是串行的,就一个主线程,当我们为了实现加速而开了很多工作线程,这些工作线程就是软件线程Parallel的使用Parallel类... 查看详情

java使用线程池和多线程实现并行计算(案例一)

主要实现:任务分割分步骤计算执行执行结果有序的聚合在一起packagethread;importjava.util.ArrayList;importjava.util.List;importjava.util.concurrent.Callable;importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Execu 查看详情

springboot2.x开发案例之整合quartz任务管理系统

基于spring-boot2.x+quartz的CRUD任务管理系统,适用于中小项目。基于spring-boot+quartz的CRUD任务管理系统:https://gitee.com/52itstyle/spring-boot-quartz开发环境JDK1.8、Maven、Eclipse技术栈SpringBoot2.0.1、thymeleaf3.0.9、quartz2.3.0、iview、vue 查看详情

springboot开发之多线程理解单例研究线程池学习和项目运行问题解决

springboot多线程问题和单例相关研究一直以来对springboot中的多线程和并发的实际应用没有进行一个深入的了解,今天对相关的知识进行了学习和验证(基于springboot2.x)。总结如下:controller、service、repository默认都是单例形式... 查看详情