线程池

根据类名了解大致的架构!

  • java.util.concurrent.Executor (interface)
    执行者,Executor 提供了execute()方法来执行已提交的Runnable任务的对象。Executor 存在的目的是提供一种将"任务提交"与"任务如何运行"分离开来的机制。

    • java.util.concurrent.ExecutorService (interface)
      执行者的服务,包括提交任务给 Executor 的方法,让 Executor 执行任务的方法。

      1. java.util.concurrent.AbstractExecutorService (abstract)
        ExecutorService 提供默认实现

        • java.util.concurrent.ThreadPoolExecutor
          线程池
      2. java.util.concurrent.ScheduledExecutorService (interface)
        提供了"延时"和"周期执行"功能的ExecutorService。

        • java.util.concurrent.ScheduledThreadPoolExecutor
      3. Executors
        静态工厂类

4种线程池

  • Executors.newSingleThreadExecutor():创建只有一个线程的线程池,即每次只能执行一个线程任务,多余的任务会保存到一个任务队列中,等待这一个线程空闲,当这个线程空闲了再按FIFO方式顺序执行任务队列中的任务。

  • Executors.newCachedThreadPool():是一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们。对于执行很多短期异步任务的程序而言,这些线程池通常可提高程序性能。调用 execute() 将重用以前构造的线程(如果线程可用)。如果现有线程没有可用的,则创建一个新线程并添加到池中。终止并从缓存中移除那些已有 60 秒钟未被使用的线程。因此,长时间保持空闲的线程池不会使用任何资源。注意,可以使用 ThreadPoolExecutor 构造方法创建具有类似属性但细节不同(例如超时参数)的线程池。

  • Executors.newFixedThreadPool():创建固定大小的线程池,每次提交一个任务就创建一个线程,直到线程达到线程池的最大大小,线程池的大小一旦达到最大值就会保持不变,如果某个线程因为执行异常而结束,那么线程池会补充一个新线程。

  • Executors.newFixedThreadPool():创建一个大小无限的线程池,此线程池支持定时以及周期性执行任务的需求。

参考

  1. 线程、多线程与线程池总结

你可能感兴趣的:(线程池)