线程池

作者: 不要加香菜 | 来源:发表于2018-06-12 17:11 被阅读0次

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

    • 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. 线程、多线程与线程池总结

    相关文章

      网友评论

          本文标题:线程池

          本文链接:https://www.haomeiwen.com/subject/doiiuxtx.html