根据类名了解大致的架构!
-
java.util.concurrent.Executor
(interface)
执行者,Executor 提供了execute()
方法来执行已提交的Runnable
任务的对象。Executor 存在的目的是提供一种将"任务提交"与"任务如何运行"分离开来的机制。-
java.util.concurrent.ExecutorService
(interface)
执行者的服务,包括提交任务给 Executor 的方法,让 Executor 执行任务的方法。-
java.util.concurrent.AbstractExecutorService
(abstract)
为ExecutorService
提供默认实现-
java.util.concurrent.ThreadPoolExecutor
线程池
-
-
java.util.concurrent.ScheduledExecutorService
(interface)
提供了"延时"和"周期执行"功能的ExecutorService。java.util.concurrent.ScheduledThreadPoolExecutor
-
Executors
静态工厂类
-
-
4种线程池
-
Executors.newSingleThreadExecutor()
:创建只有一个线程的线程池,即每次只能执行一个线程任务,多余的任务会保存到一个任务队列中,等待这一个线程空闲,当这个线程空闲了再按FIFO方式顺序执行任务队列中的任务。 -
Executors.newCachedThreadPool()
:是一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们。对于执行很多短期异步任务的程序而言,这些线程池通常可提高程序性能。调用 execute() 将重用以前构造的线程(如果线程可用)。如果现有线程没有可用的,则创建一个新线程并添加到池中。终止并从缓存中移除那些已有 60 秒钟未被使用的线程。因此,长时间保持空闲的线程池不会使用任何资源。注意,可以使用 ThreadPoolExecutor 构造方法创建具有类似属性但细节不同(例如超时参数)的线程池。 -
Executors.newFixedThreadPool()
:创建固定大小的线程池,每次提交一个任务就创建一个线程,直到线程达到线程池的最大大小,线程池的大小一旦达到最大值就会保持不变,如果某个线程因为执行异常而结束,那么线程池会补充一个新线程。 -
Executors.newFixedThreadPool()
:创建一个大小无限的线程池,此线程池支持定时以及周期性执行任务的需求。
网友评论