概述:

在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 中几种常用的线程池相关推荐

  1. Java 线程池原理及四种常用的线程池使用

    推荐阅读:Java线程池实现原理及其在美团业务中的实践 文章目录 什么是线程池 使用线程池的好处 线程池的实现原理 流程图分析 源码分析 线程池的使用 向线程池中提交任务 newCachedThrea ...

  2. 内存池——第一章 几种常用的内存池技术

    几乎所有应用程序中都会有内存的分配和释放,而频繁的分配和释放内存无疑会产生内存碎片,降低系统性能,尤其对性能要求较高的程序比较明显.下面介绍几种常见的内存池技术.     一  环形缓存     环形 ...

  3. rpc框架有哪些java_JAVA中几种常用的RPC框架介绍

    1.dubbo: 使用Hessian的序列化协议,传输则是TCP协议,使用了高性能的NIO框架Netty 服务接口 1 public interface DemoService { 2 String ...

  4. JAVA中方法的类型转换_Java中几种常用数据类型之间转换的方法

    Java中几种常用的数据类型之间转换方法: 1. short-->int 转换 exp: short shortvar=0; int intvar=0; shortvar= (short) in ...

  5. 看门狗(Watch Dog)是嵌入式系统中一种常用的保证系统可靠性的技术,()会产生看门狗中断。【详细!小白也能看懂!】

    看门狗(Watch Dog)是嵌入式系统中一种常用的保证系统可靠性的技术,()会产生看门狗中断. A. 软件喂狗 B. 处理器温度过高 C. 外部中断 D. 看门狗定时器超时 解析: 思考方式: 每个 ...

  6. 写出python字符串三种常用的函数或方法_python中几种常用字符串函数

    1.lower()把所有字符换成小写 2.upper()把所有字符换成大写 3.swapcase()大小写互换 4.title()把每个单词首字母大写,他是以所有英文字母的字符来区别是否为一个单词的, ...

  7. R中两种常用并行方法——2. snowfall

    上一篇博客(R中两种常用并行方法--1. parallel)中已经介绍了R中常见的一种并行包:parallel,其有着简单便捷等优势,其实缺点也是非常明显,就是很不稳定.很多时候我们将大量的计算任务挂 ...

  8. UI(1)---手机界面设计中12种常用布局

    手机界面设计中12种常用布局 手机界面设计中12种常用布局 转载自: 手机界面设计中12种常用布局 - 轩枫阁 总结下手机界面改版要考虑的布局,主要的分为以下2大类 主导航 列表式 陈列馆式 九宫馆式 ...

  9. JAVA中几种常用JSON库性能比较

    点击上方"方志朋",选择"置顶公众号" 技术文章第一时间送达! 作者:飞污熊 xncoding.com/2018/01/09/java/jsons.html 本 ...

最新文章

  1. 【深度学习基础】一步一步讲解卷积神经网络
  2. 普通硬件就能破解GSM A5加密算法
  3. MIT新研究:过去80年,算法效率提升到底有多快?
  4. 信息安全意识电子期刊第八期
  5. 基于Visual Studio2010讲解C#4.0语法(5)--使用CollectionClasses
  6. Saltstack grains组件
  7. 一个很简短的 JS 生成器入门和用法参考
  8. 狄利克雷卷积_一些狄利克雷卷积性质的证明
  9. OpenCV定制和调试检测系统
  10. java uuid静态方法_Java UUID equals()方法与示例
  11. 【LeetCode笔记】199. 二叉树的右视图(Java、二叉树、层序遍历)
  12. windows 查看网络中断事件_等保测评2.0:Windows安全审计
  13. 【计算机网络笔记】数据链路层(封装成帧,差错检测,可靠传输)
  14. 【算法】排序_冒泡排序及其优化
  15. jmeter5.4.1插件管理器下载安装-Jmeter-plugins-manager
  16. 利用python爬虫程序爬取豆瓣影评
  17. Solidity智能合约库:区块链工程师的随身工具箱
  18. box-shadow单边
  19. 滑动窗口(最大最小值)的经典例题
  20. 设计类计算机主机要求,术业有专攻,设计师就该配台专业点的电脑

热门文章

  1. c标签List 判断空、获取长度、遍历map、格式化时间
  2. linux用分割的csv文件读取,在Linux中将制表符分隔的文件转换为CSV的最快方法
  3. 今日突发奇想:如何压缩音频
  4. 【干货】如何打造HR无法拒绝的简历?测试开发大牛带手把手你写简历!
  5. win7下chm文件打开空白无内容的解决办法
  6. 最全的PDF转Word方案,办公族都需要
  7. 2d3d卫星地图转换+搜索js+html+css实现
  8. 前端面试大全(序篇)
  9. Nopcommerce 2.6 大型B2C购物平台整站开源提供
  10. 垃圾CPU,耗我时光——Jetson Nano 初体验2