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 线程池 (转发)的更多相关文章

  1. Android线程管理之ExecutorService线程池

    前言: 上篇学习了线程Thread的使用,今天来学习一下线程池ExecutorService. 线程管理相关文章地址: Android线程管理之Thread使用总结 Android线程管理之Execu ...

  2. ExecutorService线程池

    ExecutorService 建立多线程的步骤: 1.定义线程类 class Handler implements Runnable{} 2.建立ExecutorService线程池 Executo ...

  3. Handler+ExecutorService(线程池)+MessageQueue模式+缓存模式

    android线程池的理解,晚上在家无事 预习了一下android异步加载的例子,也学习到了一个很重要的东东 那就是线程池+缓存  下面看他们的理解.[size=1.8em]Handler+Runna ...

  4. Android学习笔记之ExecutorService线程池的应用....

    PS:转眼间就开学了...都不知道这个假期到底是怎么过去的.... 学习内容: ExecutorService线程池的应用... 1.如何创建线程池... 2.调用线程池的方法,获取线程执行完毕后的结 ...

  5. ExecutorService线程池讲解

    ExecutorService 建立多线程的步骤: 1.定义线程类 class Handler implements Runnable{ } 2.建立ExecutorService线程池 Execut ...

  6. java android ExecutorService 线程池解析

    ExecutorService: 它也是一个接口,它扩展自Executor接口,Executor接口更像一个抽象的命令模式,仅有一个方法:execute(runnable);Executor接口简单, ...

  7. 【转】Handler+ExecutorService(线程池)+MessageQueue模式+缓存模式

    http://www.cnblogs.com/wanqieddy/archive/2013/09/06/3305482.html android线程池的理解,晚上在家无事 预习了一下android异步 ...

  8. 【转】[Android实例] Handler+ExecutorService(线程池)+MessageQueue模式+缓存模式

    android线程池的理解,晚上在家无事 预习了一下android异步加载的例子,也学习到了一个很重要的东东 那就是线程池+缓存  下面看他们的理解. [size=1.8em]Handler+Runn ...

  9. [Android实例] Handler+ExecutorService(线程池)+MessageQueue模式+缓存模式

    android线程池的理解,晚上在家无事 预习了一下android异步加载的例子,也学习到了一个很重要的东东 那就是线程池+缓存  下面看他们的理解. [size=1.8em]Handler+Runn ...

随机推荐

  1. CentOS 6.2 X64上64位Oracle11gR2 静默安装,静默设置监听,静默建库经验

    1 安装前环境:  操作系统:CetnOS6.2x64 最小化安装,已配置好网络IP:172.16.2.182,物理内存8GB,硬盘100GB.  已下载: Linux.x64_11gR2_datab ...

  2. AutoCAD2012启动错误 1308 源文件未找到

    启动AutoCAD2012时,弹出错误1308,如图所示: 是何原因? 对CAD的运行有何影响?

  3. BZOJ 1396||2865 识别子串

    这个不是题解,看不懂的,别看了 明明应该是会的,怎么还是写了6个小时呢... 把后缀数组.height数组.排名数组求出来,那么对于原串s的任意子串[x,y](表示第x个到第y个字符组成的子串,字符从 ...

  4. 灰度世界算法(Gray World Algorithm) 分类: 图像处理 Matlab 2014-12-07 18:40 874人阅读 评论(0) 收藏

    人的视觉系统具有颜色恒常性,能从变化的光照环境和成像条件下获取物体表面颜色的不变特性,但成像设备不具有这样的调节功能, 不同的光照环境会导致采集的图像颜色与真实颜色存在一定程度的偏差,需要选择合适的颜 ...

  5. zoj3699Dakar Rally

    链接 开两个队列 一个维护价格从大到小用来每次更新买油的价格 让每次都加满 如果当前价格比队列里的某价格低的话就更新 另开以优先队列维护价格由小到大 来更新此时用的油是什么油价的 并减掉 #inclu ...

  6. 点击后打开QQ临时会话

    1.QQ官方提供的代码.如果没有加好友需要加好友才能聊天,也可以到这里http://shang.qq.com/v3/index.html 开通一个服务,同样可以实现临时会话. <a href=& ...

  7. JavaScript实现JQuery的功能

  8. orcale 数据库的一些知识

    最近学了一些Oracle数据库的知识,我想自己整理一下,以后也方便自己查阅的. orcale 数据库登录(tiger) 1. sql plus 登录 用户名: sys 口令: 主机字符串:orcl a ...

  9. java synchronized(object/this)的 区别

    1.synchronized(object) package test.thread; import java.io.IOException; import org.junit.Test; /* * ...

  10. 使用Jenkins进行android项目的自动构建(3)

    建立Jenkins项目 1. “新增作业”->填写作业名称->选择“建置 Maven 2 或 3 專案”->OK.新增成功后会进入“組態設定”,暂时先保留默认值,稍后再进行设定. 2 ...