并发编程——线程池

chatgpt/2023/10/4 8:24:29

1.概述

如果并发的线程过多,而且执行的时间都非常短,如果这样,每次都要创建线程就会大大降低效率,我们可以通过线程池来解决,JDK5增加了内置线程池ThreadPollExecutor。

2.线程池的优点

1.重复利用,降低了线程频繁创建销毁消耗的时间。

2.统一的线程管理,由线程池来负责。

3.ThreadPollExecutor构造方法中各个参数的意义

  • corePoolSize:核心池的大小,默认情况下,刚创建出线程池,线程池的大小为0,来一个任务创建一个线程,除非事先创建好预备的线程。

  • maximumPoolSize:线程池的最大线程数,核心和非核心线程的总和。

  • keepAliveTime非核心池中非核心线程的保存时间

  • unit:keepAliveTime的时间单位。

  • workQueue:一个阻塞的队列,里面存放的是等待到核心池获取线程的任务。

  • threadFactory:线程工厂,用来创建线程。

  • handler:表示拒绝处理任务的策略,有四种。

4.线程池的执行

执行流程

当一个任务要被执行时,会先看核心线程池是否已满,如果未满,则从核心池中获取线程,如果核心池满了,则尝试去添加到队列中,等待获取核心线程中中的资源,如果队列已满,则看非核心线程池是否已满,如果未满,则从非核心线程池中获取线程,如果非核心线程都满了,则需要执行拒绝任务的策略。

5.线程池中的队列

  • ArrayBlockingQueue:有一个数组实现的有界队列,创建时必须设置初始大小,按照先来后到的方式执行。

  • LinkedBlockingQueue:基于链表实现的队列,默认容量是Integer.MAX_VALUE,也可手动设置,按照先来后到的方式执行。

6.线程池的4种拒绝策略

  • AbortPolicy:直接抛出异常,阻止正常的工作。

  • DiscardOleddestPolicy:丢弃等待时间最长的任务。

  • DiscardPolicy:直接丢弃,不执行。

  • CallerRunsPolicy:交由提交任务的线程执行任务(例如:main)。

7.execute 与 submit 执行任务的区别

execute没有返回值,submit有返回值,通过get方法获取。

8.shutdownNow和shutdown关闭线程池方法的区别

shutdownNow表示现在立刻停止所有任务,对等待执行的任务全部取消。

shutdown表示停止再接收新的任务,还未执行完的任务继续执行。

 

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

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

第三课:运算符

1.算数运算符 int a 20; int b 10; System.out.println(a b); // 30 System.out.println(a - b); // 10 System.out.println(a * b); // 200 System.out.println(a / b); // 2 System.out.println(a % b); // 0 --->模运算相当于数学中除法的余数 ⚠关于/除法 public s…

未来前端框架的发展趋势

未来前端框架的发展将持续聚焦在组件化开发、性能优化和打包体积、跨平台开发、小程序框架的崛起、深度集成TypeScript、用户体验和可访问性、全球化和国际化等方向。通过不断地创新和改进,前端框架将推动Web应用开发的进步,为用户提供更好的使用体验和开…

华为云安装MySQL后,本地工具连接MySQL失败

华为云安装MySQL后,本地连接失败 排查问题步骤: 在此之前需要在MySQL创建用户,并赋予权限。 1、能否ping通。 在本地命令行(Windows:winR)通过ping命令,ping服务器地址,看能否ping通。不能则需要检查本地…

学C的第三十一天【通讯录的实现】

相关代码gitee自取:C语言学习日记: 加油努力 (gitee.com) 接上期: 学C的第三十天【自定义类型:结构体、枚举、联合】_高高的胖子的博客-CSDN博客 通讯录需求: 实现一个通讯录, 通讯录中存放保存人的信息&#xff1…

如何加速spring/springboot应用启动速度

Gitee地址 :https://gitee.com/mr_wenpan/basis-enhance/tree/master 一、解决的痛点 在实际使用 Spring/Spring Boot 开发中,一些 Bean 在初始化过程中,会执行一些准备操作,如: 拉取远程配置初始化数据源加载数据到…

Linux环境安装MySQL(详细教程)

1、下载MySQL MySQL官网:MySQLhttps://www.mysql.com/ 下载社区版(免费,但不提供技术支持) 简单说明一下rpm和tar包的区别: tar 只是一种压缩文件格式,所以,它只是把文件压缩打包 rpm&#xf…

普冉---PY32F030---EXIT外部中断的使用

官方例程描述的并不详细。 且我感觉写的有问题,所以我就修改了一下。 EXIT外部中断的使用: 1.初始化用于中断的引脚。(和初始化普通IO差不多) 2.使能中断。 3.配置中断优先级。 4.中断函数中,清除中断标志位。 该代码…
推荐文章