购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.2 Executor接口与ExecutorService接口

前面从宏观的角度介绍了Executor线程池框架所提供的功能和相关优点,不过对于没有使用过Executor线程池框架或者没有分析过Executor线程池框架的设计原理的读者来说,理解起来可能会比较吃力。所以在进一步介绍Executor框架的使用方法之前,先介绍一下Executor框架的基础类设计,这样在进行编程时,就能更好地知道每个核心方法,如最常用的execute、submit方法在哪里定义,有什么区别等。

在Executor线程池框架的底层接口设计层面,核心接口包括Executor和ExecutorService,在这两个接口中定义了任务提交的相关方法,具体如下分析。

4.2.1 Executor接口

Java语言提倡面向接口编程,所以在这里也是从Executor线程池框架的最底层接口Executor接口说起。

Executor接口只包含一个execute方法,表示提交任务给线程池执行。execute方法的参数为Runnable接口的实现类,返回值为void,具体定义如下:

具体含义为将应用程序中通过实现Runnable接口定义好的任务,使用execute方法交给Executor线程池框架执行即可。由于返回值为void,故调用该方法时是不会给应用程序或者调用主线程返回执行结果。

4.2.2 ExecutorService接口

Executor接口只包含一个execute方法,这样设计是用于表明Executor线程池框架提供的最基础的功能是实现任务的提交和任务的执行分离语义的。

而在实际应用中,只包含这项功能是远远不够的,因为还需要考虑线程池的关闭、任务执行结果的返回等。所以进一步定义了ExecutorService接口,ExecutorService继承于Executor接口,核心方法定义如下:

相对于Executor接口,ExecutorService额外提供了以下方法。

(1)定义了submit方法,其中submit方法可以返回一个Future类型的对象。Future类提供异步获取任务的执行结果的功能,故可以在应用程序中获取此次提交任务的执行结果。

(2)定义了shutdown方法,作用是关闭线程池,禁止应用程序继续往该线程池提交任务。弥补了Executor接口的execute方法可以被无限调用来提交大量任务,导致资源过度消耗的缺陷。 XnyniA8zjbHLZry71f8UJcO4edx+/Xaw6LgIknSnLYLDlk4hkWGW6bsH1hFvPoJs

点击中间区域
呼出菜单
上一章
目录
下一章
×