Skip to the content.

首页

version: jdk17


Callable

@FunctionalInterface
public interface Callable<V> {
    V call() throws Exception;
}

不是继承自Runnable,能返回结果或者抛出异常。


interface RunnableFuture<V> extends Runnable, Future<V>

RunnableFuture同时继承了Runnable和Future,用于包装任务,将自身作为Runable提交,之后再作为Future使用。


class FutureTask<V> implements RunnableFuture<V>


abstract class AbstractExecutorService implements ExecutorService

ExecutorService的抽象实现,默认将提交给线程池的任务包装为FutureTask。


class ThreadPoolExecutor extends AbstractExecutorService

属性

构造方法属性

// 核心线程数,默认添加任务时才创建,可通过prestartCoreThread、ensurePrestart及prestartAllCoreThreads提前创建。
private volatile int corePoolSize;

// 最大线程数,必须大于corePoolSize。
private volatile int maximumPoolSize;

// 阻塞队列,无法被修改。
private final BlockingQueue<Runnable> workQueue;

// 空闲线程存活时间,单位纳秒。
private volatile long keepAliveTime;

// 线程工厂,默认Executors.defaultThreadFactory()。
private volatile ThreadFactory threadFactory;

// 拒绝策略,默认AbortPolicy。
private volatile RejectedExecutionHandler handler;

其他属性

interface RejectedExecutionHandler

void rejectedExecution(Runnable r, ThreadPoolExecutor executor);

private final class Worker extends AbstractQueuedSynchronizer implements Runnable

实例方法

ExecutorService方法实现


Executors

ScheduledThreadPoolExecutor

class ScheduledFutureTask<V> extends FutureTask<V> implements RunnableScheduledFuture

ScheduledThreadPoolExecutor使用的FutureTask,使用heapIndex记录了task在DelayedWorkQueue中的索引,将查找效率从O(logn)提高到O(1)

class DelayedWorkQueue extends AbstractQueue<Runnable> implements BlockingQueue<Runnable>

ScheduledThreadPoolExecutor使用的BlockingQueue,为基于延时时间的优先队列(实现类似DelayQueue),存储任务使用RunnableScheduledFuture<?>[](非PriorityQueue),故查找效率为O(1)。