Java编程

图灵学院javavip下载

1、Executorpublic interface Executor {// 执行Runnable任务void execute(Runnable command);}ExecutorService:

提供了多种提交任务的方式,支持Callable定义了线程池相关操作的接口public interface ExecutorService extends Executor {// 启动有序关闭,其中先前提交的任务将被执行,但不会接受任何新任务。void shutdown();/*** 立即关闭执行器, 主要有以下特点:* 1. 尝试停止所有正在执行的任务, 无法保证能够停止成功, 但会尽力尝试(例如, 通过 Thread.interrupt中断任务, 但是不响应中断的任务可能无法终止);* 2. 暂停处理已经提交但未执行的任务;** @return 返回已经提交但未执行的任务列表*/List shutdownNow();// 如果此执行程序已关闭,则返回true。boolean isShutdown();// 仅当执行器已关闭且所有任务都已经执行完成, 才返回true.boolean isTerminated();// 阻止所有任务在关闭请求之后完成执行,或者发生超时,或者当前线程被中断,以先发生者为准boolean awaitTermination(long timeout, TimeUnit unit)throws InterruptedException;// 接收Callable实现,返回Future对象 Future submit(Callable task);// 提交Runnable任务以执行并返回表示该任务的Future。 Future submit(Runnable task, T result);// 提交Runnable任务以执行并返回表示该任务的Future// 注意: Future的get方法在成功完成时将会返回null.Future submit(Runnable task);// 执行给定集合中的所有任务, 当所有任务都执行完成后, 返回保持任务状态和结果的 Future 列表.// 注意: 该方法为同步方法. 返回列表中的所有元素的Future.isDone() 为 true. List> invokeAll(Collection> tasks)throws InterruptedException;// 执行给定集合中的所有任务, 当所有任务都执行完成后或超时期满时(无论哪个首先发生)// 返回保持任务状态和结果的 Future 列表. List> invokeAll(Collection> tasks,long timeout, TimeUnit unit)throws InterruptedException;// 执行给定集合中的任务, 只有其中某个任务率先成功完成(未抛出异常), 则返回其结果// 一旦正常或异常返回后, 则取消尚未完成的任务. T invokeAny(Collection> tasks)throws InterruptedException, ExecutionException;// 执行给定集合中的任务, 如果在给定的超时期满前, 某个任务已成功完成(未抛出异常), 则返回其结果.// 一旦正常或异常返回后, 则取消尚未完成的任务. T invokeAny(Collection> tasks,long timeout, TimeUnit unit)throws InterruptedException, ExecutionException, TimeoutException;}AbstractExecutorService:

聚合各种提交方式的入口,将各种任务包装为RunnableFuture,统一调用 execute(RunnableFuture ftask);实现各种invoke*的调用逻辑,聚合为doInvokeAnypublic Future submit(Runnable task) {if (task == null) throw new NullPointerException();RunnableFuture ftask = newTaskFor(task, null);execute(ftask);return ftask;}public Future submit(Runnable task, T result) {if (task == null) throw new NullPointerException();RunnableFuture ftask = newTaskFor(task, result);execute(ftask);return ftask;}public Future submit(Callable task) {if (task == null) throw new NullPointerException();RunnableFuture ftask = newTaskFor(task);execute(ftask);return ftask;}ScheduledExecutorService:

交给执行器的某些任务能够定时执行或周期性地执行

public interface ScheduledExecutorService extends ExecutorService {public ScheduledFuture schedule(Runnable command, long delay, TimeUnit unit);public ScheduledFuture schedule(Callable callable, long delay, TimeUnit unit);public ScheduledFuture scheduleAtFixedRate(Runnable command,long initialDelay,long period,TimeUnit unit);public ScheduledFuture scheduleWithFixedDelay(Runnable command,long initialDelay,long delay,TimeUnit unit);}Executors:

提供线程池的工厂函数操作线程池创建核心创建方式:

newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。核心API:

1、execute(Runnable command):履行Ruannable类型的任务,2、submit(task):可用来提交Callable或Runnable任务,并返回代表此任务的Future 对象 3、shutdown():在完成已提交的任务后封闭办事,不再接管新任务,4、shutdownNow():停止所有正在履行的任务并封闭办事。5、isTerminated():测试是否所有任务都履行完毕了。6、isShutdown():测试是否该ExecutorService已被关闭。

corePoolSize :池中所保存的线程数,包括空闲线程maximumPoolSize:池中允许的最大线程数keepAliveTime: 当线程数大于核心时,此为终止前多余的空闲线程等待新任务的最长时间unit:keepAliveTime 参数的时间单位workQueue :执行前用于保持任务的队列。此队列仅保持由 execute 方法提交的 Runnable 任务threadFactory:执行程序创建新线程时使用的工厂handler :由于超出线程范围和队列容量而使执行运行逻辑:

如果当前池大小,poolSize 小于 corePoolSize ,则创建新线程执行任务如果当前池大小,poolSize 大于 corePoolSize ,且等待队列未满,则进入等待队列如果当前池大小,poolSize 大于 corePoolSize 且小于 maximumPoolSize ,且等待队列已满,则创建新线程,执行任务如果当前池大小,poolSize 大于 corePoolSize 且大于 maximumPoolSize ,且等待队列已满,则调用拒绝策线程池里的每个线程执行完任务后不会立刻退出,而是会去检查下等待队列里是否还有线程任务需要执行, 如果在keepAliveTime 里等不到新的任务了,那么线程就会退出2、执行原理构造参数:

/*** 使用给定的参数创建

Similar Posts

发表评论

邮箱地址不会被公开。 必填项已用*标注