spring线程池 java_Java 中几种常用的线程池
概述:
在java内置API中操作线程所用到的类为Thread。创建线程一般有两种方式,
继承Thread方式
实现Runnable方式,并以runnable作为target创建Thread
在Android中的耗时任务一般都需要另开线程来执行,常常需要用线程池来管理这些线程,实现控制线程数,重用,控制执行和取消等功能。
Java线程池
Java提供了四种线程池
newCachedThreadPool :
可缓存线程池,若线程池长度超过处理需要,则回收空线程,否则创建新线程,线程规模可无限大。
ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
1
当执行第二个任务时第一个任务已经完成,会复用执行第一个任务的线程,而不用每次新建线程。
newFixedThreadPool :
定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3);
1
定长线程池的大小最好根据系统资源进行设置。如Runtime.getRuntime().availableProcessors()。
newScheduledThreadPool :
定长线程池,支持定时及周期性任务执行,类似Timer。
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
1
使用实例:
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
//表示延迟1秒后每3秒执行一次。
scheduledThreadPool.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
System.out.println("delay 1 seconds, and excute every 3 seconds");
}
}, 1, 3, TimeUnit.SECONDS);
1
2
3
4
5
6
7
8
newSingleThreadExecutor :
单线程 的线程池,支持FIFO, LIFO, 优先级策略。
ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();
1
通过观察源码,其中四种线程的创建都是创建一个ThreadPoolExecutor。其中ThreadPoolExecutor是ExecutorService接口的实现类。
java.util.concurrent
此包是java的并发编程包,其下定义了三个Executor接口
Executor:一个运行新任务的简单接口。
ExecutorService:扩展了Executor接口。添加了一些用来管理执行器生命周期和任务生命周期的方法。
ScheduledExecutorService:扩展了ExecutorService。支持Future和定期执行任务。
实现类包括:ScheduledThreadPoolExecutor、ThreadPoolExecutor。
java中提供的四种线程池,除了ScheduledThreadPool使用的是ScheduledThreadPoolExecutor,其他均为ThreadPoolExecutor。
ThreadPoolExecutor
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler) {}
1
2
3
4
5
6
7
参数说明
corePoolSize :线程池的核心线程数。
maximumPoolSize :线程池所能容纳的最大线程数。
keepAliveTime :非核心线程闲置时的超时时长。超过该时长,非核心线程就会被回收。
unit :keepAliveTime的时间单位。
workQueue :线程池中的任务队列。
threadFactory:线程工厂,默认值DefaultThreadFactory。
handler : 饱和策略,当线程池中的数量大于maximumPoolSize,对拒绝任务的处理策略,默认值ThreadPoolExecutor.AbortPolicy()。
spring线程池 java_Java 中几种常用的线程池相关推荐
- Java 线程池原理及四种常用的线程池使用
推荐阅读:Java线程池实现原理及其在美团业务中的实践 文章目录 什么是线程池 使用线程池的好处 线程池的实现原理 流程图分析 源码分析 线程池的使用 向线程池中提交任务 newCachedThrea ...
- 内存池——第一章 几种常用的内存池技术
几乎所有应用程序中都会有内存的分配和释放,而频繁的分配和释放内存无疑会产生内存碎片,降低系统性能,尤其对性能要求较高的程序比较明显.下面介绍几种常见的内存池技术. 一 环形缓存 环形 ...
- rpc框架有哪些java_JAVA中几种常用的RPC框架介绍
1.dubbo: 使用Hessian的序列化协议,传输则是TCP协议,使用了高性能的NIO框架Netty 服务接口 1 public interface DemoService { 2 String ...
- JAVA中方法的类型转换_Java中几种常用数据类型之间转换的方法
Java中几种常用的数据类型之间转换方法: 1. short-->int 转换 exp: short shortvar=0; int intvar=0; shortvar= (short) in ...
- 看门狗(Watch Dog)是嵌入式系统中一种常用的保证系统可靠性的技术,()会产生看门狗中断。【详细!小白也能看懂!】
看门狗(Watch Dog)是嵌入式系统中一种常用的保证系统可靠性的技术,()会产生看门狗中断. A. 软件喂狗 B. 处理器温度过高 C. 外部中断 D. 看门狗定时器超时 解析: 思考方式: 每个 ...
- 写出python字符串三种常用的函数或方法_python中几种常用字符串函数
1.lower()把所有字符换成小写 2.upper()把所有字符换成大写 3.swapcase()大小写互换 4.title()把每个单词首字母大写,他是以所有英文字母的字符来区别是否为一个单词的, ...
- R中两种常用并行方法——2. snowfall
上一篇博客(R中两种常用并行方法--1. parallel)中已经介绍了R中常见的一种并行包:parallel,其有着简单便捷等优势,其实缺点也是非常明显,就是很不稳定.很多时候我们将大量的计算任务挂 ...
- UI(1)---手机界面设计中12种常用布局
手机界面设计中12种常用布局 手机界面设计中12种常用布局 转载自: 手机界面设计中12种常用布局 - 轩枫阁 总结下手机界面改版要考虑的布局,主要的分为以下2大类 主导航 列表式 陈列馆式 九宫馆式 ...
- JAVA中几种常用JSON库性能比较
点击上方"方志朋",选择"置顶公众号" 技术文章第一时间送达! 作者:飞污熊 xncoding.com/2018/01/09/java/jsons.html 本 ...
最新文章
- 【深度学习基础】一步一步讲解卷积神经网络
- 普通硬件就能破解GSM A5加密算法
- MIT新研究:过去80年,算法效率提升到底有多快?
- 信息安全意识电子期刊第八期
- 基于Visual Studio2010讲解C#4.0语法(5)--使用CollectionClasses
- Saltstack grains组件
- 一个很简短的 JS 生成器入门和用法参考
- 狄利克雷卷积_一些狄利克雷卷积性质的证明
- OpenCV定制和调试检测系统
- java uuid静态方法_Java UUID equals()方法与示例
- 【LeetCode笔记】199. 二叉树的右视图(Java、二叉树、层序遍历)
- windows 查看网络中断事件_等保测评2.0:Windows安全审计
- 【计算机网络笔记】数据链路层(封装成帧,差错检测,可靠传输)
- 【算法】排序_冒泡排序及其优化
- jmeter5.4.1插件管理器下载安装-Jmeter-plugins-manager
- 利用python爬虫程序爬取豆瓣影评
- Solidity智能合约库:区块链工程师的随身工具箱
- box-shadow单边
- 滑动窗口(最大最小值)的经典例题
- 设计类计算机主机要求,术业有专攻,设计师就该配台专业点的电脑