Java 新建线程时使用线程池处理
说明:
线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。 Executors各个方法的弊端:
- newFixedThreadPool和newSingleThreadExecutor:
主要问题是堆积的请求处理队列可能会耗费非常大的内存,甚至OOM。
- newCachedThreadPool和newScheduledThreadPool:
主要问题是线程数最大数是Integer.MAX_VALUE,可能会创建数量非常多的线程,甚至OOM。
Executors 中各个线程解释链接:https://blog.csdn.net/qq_36381855/article/details/79942555
---------------------
推荐使用一下两种:
- ThreadPoolExecutor 创建线程池
public class ThreadPoolTest {private volatile static ExecutorService executorService;public static ExecutorService getExecutorService() {if (executorService == null) {synchronized (ThreadPoolTest.class) {/*** 使用谷歌的guava框架* ThreadPoolExecutor参数解释* 1.corePoolSize 核心线程池大小* 2.maximumPoolSize 线程池最大容量大小* 3.keepAliveTime 线程池空闲时,线程存活的时间* 4.TimeUnit 时间单位* 5.ThreadFactory 线程工厂* 6.BlockingQueue任务队列* 7.RejectedExecutionHandler 线程拒绝策略*/ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("demo-pool-%d").build();executorService = new ThreadPoolExecutor(10, 20,0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>(1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy());}}return executorService;} }
- ThreadPoolTaskExecutor 创建线程池
public Executor getAsyncExecutor() {ThreadPoolTaskExecutor threadPool = new ThreadPoolTaskExecutor();// 设置核心线程数threadPool.setCorePoolSize(5);// 设置最大线程数threadPool.setMaxPoolSize(10);// 线程池所使用的缓冲队列threadPool.setQueueCapacity(25);// 设置线程活跃时间(秒)threadPool.setKeepAliveSeconds(60);// 等待所有任务结束后再关闭线程池threadPool.setWaitForTasksToCompleteOnShutdown(true);// 线程名称前缀threadPool.setThreadNamePrefix("");// 初始化线程 threadPool.initialize();return threadPool;}
---------------------
原文:https://blog.csdn.net/more_try/article/details/81506501
转载于:https://www.cnblogs.com/BestWishesZJ/p/10305179.html
Java 新建线程时使用线程池处理相关推荐
- java 资源锁_concurrent包 线程池、资源封锁和队列、ReentrantReadWriteLock介绍
jdk1.5后,提供了java.util.concurrent包,它可以实现线程池,你把线程当成普通对象就可以了,它来负责调度和执行 包括两类线程池 固定线程池 可变线程池 延迟线程池 固定线程池 p ...
- java笔记--查看和修改线程名称
查看和修改线程名称 --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3893797.html "谢谢-- java是一种允许 ...
- Java - 在进行数据库编程时,连接池有什么作用?
分享一个大牛的人工智能教程.零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击人工智能教程 由于创建连接和释放连接都有很大的开销(尤其是数据库服务器不在本地时,每次建立连接都需要进行 ...
- java线程 属性_Java 线程基础
本文部分摘自<Java 并发编程的艺术> 线程简介 1. 什么是线程? 现代操作系统在运行一个程序时,会为其创建一个进程,一个进程里可以创建多个线程.现代操作系统调度的最小单元是线程,也叫 ...
- c++ 线程什么时候run_阿里后端Java面试题:启动线程是start()还是run()?为什么?...
面试官:请问启动线程是start()还是run()方法,能谈谈吗? 应聘者:start()方法 当用start()开始一个线程后,线程就进入就绪状态,使线程所代表的虚拟处理机处于可运行状态,这意味着它 ...
- 【C++ 语言】线程 ( 线程创建方法 | 线程标识符 | 线程属性 | 线程属性初始化 | 线程属性销毁 | 分离线程 | 线程调度策略 | 线程优先级 | 线程等待 )
文章目录 I 线程创建方法 II 线程执行函数 III 线程标识符 IV 线程属性 V 线程属性 1 ( 分离线程 | 非分离线程 ) VI 线程属性 2 ( 线程调度策略 ) VII 线程属性 3 ...
- android线程栈默认大小,线程的默认最大堆栈大小 - Internet Information Services | Microsoft Docs...
在本机 IIS 进程中创建线程的默认最大堆栈大小为 256 KB 12/29/2020 本文内容 本文介绍由本机 IIS 进程创建的线程的默认最大堆栈Microsoft Internet Inform ...
- IOS多线程系统学习之线程同步与线程通信
多线程编程是有趣的事情,它很容易突然出现"错误情况",这是由于系统的线程调度具有一定的随机性造成的.不过,即使程序偶然出现"错误情况",这是由于系统的线程调度具 ...
- 线程退出和线程资源回收问题
最近项目中遇到循环8M的内存泄漏问题,排查后发现是由于特殊场景下使子线程异常退出,主线程发现子线程退出便再次创建线程,此时未回收退出线程的资源造成了内存泄漏,导致数据库宿主机oom,此问题不仅导致内存 ...
最新文章
- HDU 2519 新生晚会【求组合数】
- x = x (x-1)
- 用Python和OpenCV创建一个图片搜索引擎的完整指南
- 10个最佳Node.js企业应用案例:从Uber到LinkedIn
- python3 缺少PIP解决办法
- 2、Zookeeper集群搭建、命令行Client操作
- Redis.conf 详解
- 设计类毕业生求职指南!手把手帮你从零开始找到工作!
- 资源---vc++2010学习版---注册码(注册码密匙)
- ui自动化html模板,UI自动化学习分享ppt模板
- TeamViewer跟向日葵远程控制软件有什么区别?
- 万用表测试软件,仅用万用表作为检测工具的集成电路
- 【Linux实验】用户和组群账户管理
- CTF主办方指南之对抗搅屎棍
- 【多目标优化】3. 基于分解的多目标进化算法 —(MOEA/D)
- 《视频理解中的神经网络结构设计》讲座笔记 作者:邱钊凡
- iOS获取当前网络连接状态WiFi、5G、4G、3G、2G
- 写出高斯定理的数学形式并文字解释
- 计算机基础考证强化训练范文,计算机基础知识题强化训练.doc
- Java接口(笔记本USB接口案例)
热门文章
- Visual Studio Code 202008 Python 扩展更新
- 将MongoDB.NET驱动程序与.NET Core WebAPI一起使用
- 华为交换机静态路由配置案例_快速了解配置三层交换机策略路由配置
- SVG实现loading
- php无限极 left right,php无限极分类实现的两种解决方法
- lambda表达式学习(详细理解 ) 重点在最后
- python怎么创意出字符图形_创造课程系列:Python入门
- 微信小程序wx.showToast
- 计算机网络dns实验报告,计算机网络DNS以及HTTP协议实验报告
- webpack 4 入门教程一