ExecutorService 线程池 (转发)
1.ExecutorService
java.util.concurrent.ExecutorService
接口。用来设置线程池并执行多线程任务。它有以下几个方法。
Future<?> java.util.concurrent.ExecutorService.submit(Runnable task)
提交任务并执行,返回代表这个任务的future对象。在任务成功执行完毕之前,future.get()会返回null。
Future
java.util.concurrent.ExecutorService.submit(Callable
task) 提交一个有返回值的任务并运行。在任务成功执行完毕之前,future.get()会阻塞。
void java.util.concurrent.ExecutorService.shutdown() 启动一个有序的关闭,关闭那些先前提交过的已执行完毕的任务。此时ExecutorService不再接受新的任务。
List
java.util.concurrent.ExecutorService.shutdownNow() 尝试终止正在执行的任务,终止等待执行的线程,返回等待执行的线程列表。
boolean java.util.concurrent.ExecutorService.isTerminated()
进程池已经被shutdown且所有任务均已完成时,返回true。
2.Executors
java.util.concurrent.Executors
工厂类,可以通过静态方法获得实现ExecutorService接口的对象。
主要有下面几种,见表2-1.
表2-1 常见的ExecutorService实现类

2.1ThreadPoolExecutor
ExecutorService java.util.concurrent.Executors.newCachedThreadPool()
返回的是java.util.concurrent.ThreadPoolExecutor对象。
java.util.concurrent.ThreadPoolExecutor
类。用于接收提交的任务,放到线程池中运行。
java.util.concurrent.ThreadPoolExecutor.ThreadPoolExecutor(int
corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit,
BlockingQueue
workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)
构造函数。
corePoolSize:最小线程数。一般会取Runtime.getRuntime().availableProcessors()。
maximumPoolSize:任务变多时,最大线程数。一般会取corePoolSize*20.
keepAliveTime:多开的线程用完后,等待一定时间再被回收。 unit:时间单位。
workQueue:当线程池已满,新任务不能立即执行的时候,就会放进此等待队列。 threadFactory:创建线程的工厂。
java.util.concurrent.ThreadPoolExecutor.ThreadPoolExecutor(int
corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit,
BlockingQueue
workQueue)
ThreadPoolExecutor构造函数的重载。
long
java.util.concurrent.ThreadPoolExecutor.getCompletedTaskCount()
返回执行完毕的任务数,是近似值。 long
java.util.concurrent.ThreadPoolExecutor.getTaskCount()
返回加入执行计划的所有任务总数,是近似值。 int
java.util.concurrent.ThreadPoolExecutor.getActiveCount()
返回正在执行任务的的活动状态的线程数,是近似值。
java.util.concurrent.ThreadFactory 接口,它只有下面一个方法: Thread java.util.concurrent.ThreadFactory.newThread(Runnable r) 生成Thread并返回。
2.2 ScheduledThreadPoolExecutor
java.util.concurrent.ScheduledThreadPoolExecutor.ScheduledThreadPoolExecutor(int
corePoolSize)
构造函数,创建“计划线程池执行器”。此类为ExecutorService的实现类。ScheduledFuture<?>
java.util.concurrent.ScheduledExecutorService.scheduleWithFixedDelay(Runnable
command, long initialDelay, long delay, TimeUnit unit)
开辟新线程执行任务。延迟initialDelay时间后开始执行command,并且按照period时间周期性重复调用,并且保证在上次运行完后才会执行下一次,周期时间不包括command运行时间。
ScheduledFuture<?>
java.util.concurrent.ScheduledExecutorService.scheduleAtFixedRate(Runnable
command, long initialDelay, long delay, TimeUnit unit)
延迟initialDelay时间后开始执行command,并且按照period时间周期性重复调用。周期时间包括command运行时间,如果周期时间比command运行时间短,则command运行完毕后,立刻重复运行。
3.线程异常
任务中抛出未被捕获的异常不会造成线程池的线程消失。线程池对此做了保护机制。查看jdk源码可以找到这部分代码。
4.任务过多
java.util.concurrent.RejectedExecutionHandler
接口,它只有下面一个方法: void rejectedExecution(Runnable r, ThreadPoolExecutor
executor) 当提交的任务不能被ThreadPoolExecutor执行时(如等待队列已满),调用此函数。
java.util.concurrent.ThreadPoolExecutor.AbortPolicy
RejectedExecutionHandler的实现类。它会抛出异常RejectedExecutionException。
java.util.concurrent.ThreadPoolExecutor.DiscardPolicy
RejectedExecutionHandler的实现类。它的函数体为空,即什么也不做。
以上是ExecutorService 线程池的内容,更多
ExecutorService
线程
的内容,请您使用右上方搜索功能获取相关信息。
原文:https://www.aliyun.com/jiaocheng/800619.html
ExecutorService 线程池 (转发)的更多相关文章
- Android线程管理之ExecutorService线程池
前言: 上篇学习了线程Thread的使用,今天来学习一下线程池ExecutorService. 线程管理相关文章地址: Android线程管理之Thread使用总结 Android线程管理之Execu ...
- ExecutorService线程池
ExecutorService 建立多线程的步骤: 1.定义线程类 class Handler implements Runnable{} 2.建立ExecutorService线程池 Executo ...
- Handler+ExecutorService(线程池)+MessageQueue模式+缓存模式
android线程池的理解,晚上在家无事 预习了一下android异步加载的例子,也学习到了一个很重要的东东 那就是线程池+缓存 下面看他们的理解.[size=1.8em]Handler+Runna ...
- Android学习笔记之ExecutorService线程池的应用....
PS:转眼间就开学了...都不知道这个假期到底是怎么过去的.... 学习内容: ExecutorService线程池的应用... 1.如何创建线程池... 2.调用线程池的方法,获取线程执行完毕后的结 ...
- ExecutorService线程池讲解
ExecutorService 建立多线程的步骤: 1.定义线程类 class Handler implements Runnable{ } 2.建立ExecutorService线程池 Execut ...
- java android ExecutorService 线程池解析
ExecutorService: 它也是一个接口,它扩展自Executor接口,Executor接口更像一个抽象的命令模式,仅有一个方法:execute(runnable);Executor接口简单, ...
- 【转】Handler+ExecutorService(线程池)+MessageQueue模式+缓存模式
http://www.cnblogs.com/wanqieddy/archive/2013/09/06/3305482.html android线程池的理解,晚上在家无事 预习了一下android异步 ...
- 【转】[Android实例] Handler+ExecutorService(线程池)+MessageQueue模式+缓存模式
android线程池的理解,晚上在家无事 预习了一下android异步加载的例子,也学习到了一个很重要的东东 那就是线程池+缓存 下面看他们的理解. [size=1.8em]Handler+Runn ...
- [Android实例] Handler+ExecutorService(线程池)+MessageQueue模式+缓存模式
android线程池的理解,晚上在家无事 预习了一下android异步加载的例子,也学习到了一个很重要的东东 那就是线程池+缓存 下面看他们的理解. [size=1.8em]Handler+Runn ...
随机推荐
- 有了Git这些操作,我再也不怕开发了!
Git 是什么? Git 是一个分布式的代码管理容器,本地和远端都保有一份相同的代码. Git 仓库主要是由是三部分组成:本地代码,缓存区,提交历史. Git 有哪些常规操作? Git的常规操作你了解 ...
- 423 Reconstruct Original Digits from English 从英文中重建数字
给定一个非空字符串,其中包含字母顺序打乱的英文单词表示的数字0-9.按升序输出原始的数字.注意: 输入只包含小写英文字母. 输入保证合法并可以转换为原始的数字,这意味着像 "ab ...
- 228 Summary Ranges 汇总区间
给定一个无重复元素的有序整数数组,返回数组中区间范围的汇总. 示例 1: 输入: [0,1,2,4,5,7]输出: ["0->2","4->5",& ...
- Coprime Conundrum 容斥原理
https://www.hackerrank.com/contests/hourrank-13/challenges/arthur-and-coprimes 我们可以枚举每一个p在[2, sqrt(n ...
- Xml学习笔记(1)
不同的xml文档构可能要用到不同的方法进行解析这里用到的是例如<student name="张三" id="1" sex="男"/&g ...
- [ BZOJ 2038 ] Hose
\(\\\) Description 给出一个数列,多次询问,每次给出一个区间 \([l_i,r_i]\) ,问在区间中随意选两个位置不同的数,是同一个数的概率有多大. \(n,m\le 5\time ...
- javascript之input获取的时间减1秒&&t时间恢复
将输入得到的时间减少1秒:20:00:00 ——— 19:59:59 方法一:普通时间转换 endDateMap(date){ var h = new Date(date).getHours ...
- greendao3.2.3配置时遇到的问题
这两天我一直在研究greendao这个框架,我在GitHub下载了 greendao3.2.2:https://github.com/greenrobot/greenDAO,照着网址里面来配置: // ...
- 安卓(Android )软键盘的控制(显示和隐藏)
Activity 启动时软键盘默认状态 在清单文件(manifest .xml)中可以通过在 Activity 标签中增加属性控制软键盘的默认状态: android:windowSoftInputMo ...
- R in action读书笔记(4)-第六章:基本图形(下)
6.3直方图 hist() 其中的x是一个由数据值组成的数值向量.参数freq=FALSE表示根据概率密度而不是频数绘制图形.参数breaks用于控制组的数量.在定义直方图中的单元时,默认将生成等距切 ...