如果要让线程池执行任务,需要实现的 Runnable 接口或 Callable 接口。Runnable 接口或 Callable 接口的实现类都可以被 ThreadPoolExecutor 或 ScheduledThreadPoolExecutor 执行,两者的区别在于 Runnable 接口不会返回执行结果,但 Callable 接口可以返回。
工具类 Executors 可以实现 Runnable 对象转换成 Callable 对象。(
Executors.callable(Runnable task)或Executors.callable(Runnable task, T result))。
get(long timeout,TimeUnit unit) 方法,则会阻塞当前线程一段时间后立即返回,这时候有可能任务还没有执行完。《阿里巴巴Java开发手册》中,强制线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这样的处理方式更加明确线程池的运行规则,规避资源耗尽的风险。
Executors 返回线程池对象的弊端如下:
方式一:通过构造方法实现

ThreadPoolExecutor 构造方法
方式二:通过 Executor 框架的工具类 Executors 来实现,可以创建三种类型的 ThreadPoolExecutor:
对应 Executors 工具类中的方法如图所示:

Executor 框架的工具类