标签:自定义 null count mina invoke 简单 条件 不可 重载
先看一下线程池的基础架构图:
public interface Executor { /** * Executes the given command at some time in the future. The command * may execute in a new thread, in a pooled thread, or in the calling * thread, at the discretion of the {@code Executor} implementation. * * @param command the runnable task * @throws RejectedExecutionException if this task cannot be * accepted for execution * @throws NullPointerException if command is null */ void execute(Runnable command); }
public interface ExecutorService extends Executor { /** * 启动一次顺序关闭,执行以前提交的任务,但不接受新任务 */ void shutdown(); /** * 试图停止所有正在执行的活动任务,暂停处理正在等待的任务,并返回等待执行的任务列表 */ List<Runnable> shutdownNow(); /** * 如果此执行程序已关闭,则返回 true。 */ boolean isShutdown(); /** * 如果关闭后所有任务都已完成,则返回 true */ boolean isTerminated(); /** * 请求关闭、发生超时或者当前线程中断,无论哪一个首先发生之后,都将导致阻塞,直到所有任务完成执行 */ boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException; /** * 提交一个返回值的任务用于执行,返回一个表示任务的未决结果的 Future */ <T> Future<T> submit(Callable<T> task); /** * 提交一个 Runnable 任务用于执行,并返回一个表示该任务的 Future */ <T> Future<T> submit(Runnable task, T result); /** * 提交一个 Runnable 任务用于执行,并返回一个表示该任务的 Future */ Future<?> submit(Runnable task); /** * 执行给定的任务,当所有任务完成时,返回保持任务状态和结果的 Future 列表 */ <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks) throws InterruptedException; /** * 执行给定的任务,当所有任务完成或超时期满时(无论哪个首先发生),返回保持任务状态和结果的 Future 列表 */ <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit) throws InterruptedException; /** * 执行给定的任务,如果某个任务已成功完成(也就是未抛出异常),则返回其结果 */ <T> T invokeAny(Collection<? extends Callable<T>> tasks) throws InterruptedException, ExecutionException; /** * 执行给定的任务,如果在给定的超时期满前某个任务已成功完成(也就是未抛出异常),则返回其结果 */ <T> T invokeAny(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException;}
// 创建并执行在给定延迟后启用的 ScheduledFuture。 <V> ScheduledFuture<V> schedule(Callable<V> callable, long delay, TimeUnit unit) // 创建并执行在给定延迟后启用的一次性操作。 ScheduledFuture<?> schedule(Runnable command, long delay, TimeUnit unit) // 创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期; //也就是将在 initialDelay 后开始执行,然后在 initialDelay+period 后执行,接着在 initialDelay + 2 * period 后执行,依此类推。 ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit) // 创建并执行一个在给定初始延迟后首次启用的定期操作,随后,在每一次执行终止和下一次执行开始之间都存在给定的延迟。 ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)
//实现Executor的execute方法 //1.如果线程池当前线程数小于corePoolSize,则调用addWorker创建新线程执行任务,成功返回true,失败执行步骤2 //2.如果线程池处于RUNNING状态,则尝试加入阻塞队列,如果加入阻塞队列成功,则尝试进行Double Check,确保线程可以被执行,如果加入失败,则执行步骤3 //3.如果线程池不是RUNNING状态或者加入阻塞队列失败,则尝试创建新线程直到maxPoolSize,如果失败,则调用reject()方法执行对应的拒绝策略 public void execute(Runnable var1) { if (var1 == null) { throw new NullPointerException(); } else { int var2 = this.ctl.get(); if (workerCountOf(var2) < this.corePoolSize) { if (this.addWorker(var1, true)) { return; } var2 = this.ctl.get(); } if (isRunning(var2) && this.workQueue.offer(var1)) { int var3 = this.ctl.get(); if (!isRunning(var3) && this.remove(var1)) { this.reject(var1); } else if (workerCountOf(var3) == 0) { this.addWorker((Runnable)null, false); } } else if (!this.addWorker(var1, false)) { this.reject(var1); } } } //按过去执行已提交任务的顺序发起一个有序的关闭,但是不接受新任务 public void shutdown() { ... } //尝试停止所有的活动执行任务、暂停等待任务的处理,并返回等待执行的任务列表 public List<Runnable> shutdownNow() { ... }
标签:自定义 null count mina invoke 简单 条件 不可 重载
原文地址:https://www.cnblogs.com/CHMaple/p/9283678.html