- 1
- 0
- 约4.03千字
- 约 4页
- 2018-09-29 发布于河北
- 举报
线程池核心概念掌握
任务拆分就是确定每一个执行任务(工作单元)的边界。理想情况下独立的工作单元有最大的吞吐量,这些工作单元不依赖于其它工作单元的状态、结果或者其他资源等。因此将任务尽可能的拆分成一个个独立的工作单元有利于提高程序的并发性。对于有依赖关系以及资源竞争的工作单元就涉及到任务的调度和负载均衡。工作单元的状态、结果或者其他资源等有关联的工作单元就需要有一个总体的调度者来协调资源和执行顺序。同样在有限的资源情况下,大量的任务也需要一个协调各个工作单元的调度者。这就涉及到任务执行的策略问题。任务的执行策略包括4W3H部分:
任务在什么(What)线程中执行
任务以什么(What)顺序执行(FIFO/LIFO/优先级等)
同时有多少个(How Many)任务并发执行
允许有多少个(How Many)个任务进入执行队列
系统过载时选择放弃哪一个(Which)任务,如何(How)通知应用程序这个动作
任务执行的开始、结束应该做什么(What)处理 首先明确一定是在Java里面可以供使用者调用的启动线程类是Thread。因此Runnable或者Timer/TimerTask等都是要依赖Thread来启动的,因此在ThreadPool里面同样也是靠Thread来启动多线程的。
默认情况下Runnable接口执行完毕后是不能拿到执行结果的,因此在ThreadPool里就定义了一个Callable接口来处理执行结果。
为了异步阻塞的获取结果,Future可以帮助调用线程获取执行结果。
Executor解决了向线程池提交任务的入口问题,同时ScheduledExecutorService解决了如何进行重复调用任务的问题。
CompletionService解决了如何按照执行完毕的顺序获取结果的问题,这在某些情况下可以提高任务执行的并发,调用线程不必在长时间任务上等待过多时间。
显然线程的数量是有限的,而且也不宜过多,因此合适的任务队列是必不可少的,BlockingQueue的容量正好可以解决此问题。
固定任务容量就意味着在容量满了以后需要一定的策略来处理过多的任务(新任务),RejectedExecutionHandler正好解决此问题。
一定时间内阻塞就意味着有超时,因此TimeoutException就是为了描述这种现象。TimeUnit是为了描述超时时间方便的一个时间单元枚举类。
有上述问题就意味了配置一个合适的线程池是很复杂的,因此Executors默认的一些线程池配置可以减少这个操作。
java.util.concurrent 接口 Executorvoid execute(Runnable?command)
2.接口ExecutorService
public interface ExecutorService extends Executor
特性A:提供两个方法来关闭 ExecutorServiceshutdown() 方法在终止前允许执行以前提交的任务 shutdownNow() 方法阻止等待任务启动并试图停止当前正在执行的任务。在终止时,执行程序没有任务在执行,也没有任务在等待执行,并且无法提交新任务。通过创建并返回一个可用于取消执行和/或等待完成的 Future,方法 submit 扩展了基本方法 Executor.execute(java.lang.Runnable)。Future? submit(Runnable?task)
FutureT submit(CallableT?task)
3.接口 CallableV返回结果并且可能抛出异常的任务。实现者定义了一个不带任何参数的叫做 call 的方法。call() 计算结果,如果无法计算结果,则抛出一个异常。 接口 RejectedExecutionHandler无法由 ThreadPoolExecutor 执行的任务的处理程序。rejectedExecution
void rejectedExecution(Runnable?r, ThreadPoolExecutor?executor)
5.接口ScheduledExecutorService
public interface ScheduledExecutorService extends ExecutorService
一个 ExecutorService,可安排在给定的延迟后运行或定期执行的命令。 接口 CompletionServiceV将生产新的异步任务与使用已完成任务的结果分离开来的服务。生产者 submit 执行的任务。使用者 take 已完成的任务,并按照完成这些任务的顺序处理它们的结果submit(Runnable?task, V?result) 提交要执行的 Runnable 任务,并返回一个
原创力文档

文档评论(0)