Runnable/Callable/Future/Executor 相关

问:简单谈谈你对 Java 的 Runnable、Callable、Future、Executor、ExecutorService、Executors、FutureTask 认识和理解?

答:

  • Runnable、Callable 都表示要执行的异步任务的接口,都提供了一个接口方法,Runnable 没有返回值且不会抛出异常,Callable 有返回值且会抛出异常。

  • Executor 是一个执行任务接口,其定义了一个接收 Runnable 对象的方法。

  • ExecutorService 是继承 Executor 接口执行任务的更广泛的接口,其提供了生命周期管理的方法以及可跟踪一个或多个异步任务执行状况返回 Future 的方法;

  • AbstractExecutorService 是 ExecutorService 接口执行方法的默认抽象实现类;

  • ScheduledExecutorService 是继承 ExecutorService 拓展的一个可定时调度任务接口;

  • ScheduledThreadPoolExecutor 是 ScheduledExecutorService 接口的实现类,用来表示一个可定时调度任务的线程池;

  • ThreadPoolExecutor 线程池是基于 AbstractExecutorService 的实现类;

  • 可以通过调用 Executors 以其提供的静态工厂方法来创建线程池并返回一个 ExecutorService 对象;

  • Future 表示异步任务的状态结果;

  • FutureTask 是 Future 和 Runnable 的实现类,所以 FutureTask 可以交给 Executor 执行,也可以由调用线程直接执行 FutureTask.run 方法,FutureTask 的 run 方法中又会调用 Callable 的 call 方法,FutureTask 有一个回调函数 done 方法,当一个任务执行结束后会回调这个方法,我们可以在 done 方法中调用 FutureTask 的 get 方法来获得计算的结果,这样就不会因为主动调用 get 被阻塞等待了。

你可能感兴趣的:(Runnable/Callable/Future/Executor 相关)