关于线程池的几个问题

问:为什么很多 Java 规范都建议不要显式的创建 Thread,而使用线程池?

答:因为使用线程池的好处是减少在创建和销毁线程上所消耗的时间和系统资源,解决资源不足的问题,如果不使用线程池,有可能造成系统创建大量同类线程而导致消耗完内存或者过渡切换问题。

问:为什么不建议在代码中直接使用 Executors 创建线程池,而是推荐通过 ThreadPoolExecutor 方式创建?

答:其实不直接使用工具类的目的只有一个,那就是可以明确的让我们知道线程池的运行规则,避免使用工具类的包装而不够直观内部机制而导致潜在的问题。譬如使用 Executors 的 FixedThreadPool 和 SingleThreadPool 创建线程池的原理都允许请求的队列长度为 Integer 的最大值,这样的话可能会堆积大量的请求导致 OOM;而使用 Executors 的 CachedThreadPool 和 ScheduledThreadPool 创建线程池的原理都允许创建线程数量为 Integer 的最大值,这样的话可能会导致创建大量的线程而导致 OOM,所以推荐直接通过明确的构造参数创建线程池,这样就相当与时刻提醒自己的线程池特性是什么。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前段时间遇到这样一个问题,有人问微信朋友圈的上传图片的功能怎么做才能让用户的等待时间较短,比如说一下上传9张图片,...
    加油码农阅读 1,236评论 0 2
  • 为什么使用线程池 当我们在使用线程时,如果每次需要一个线程时都去创建一个线程,这样实现起来很简单,但是会有一个问题...
    闽越布衣阅读 4,336评论 10 45
  • 线程池与Android的日日夜夜 假如你Java中研究到了线程池的话,一般来说,你已经对线程的原理颇有研究了,或者...
    minminaya阅读 1,132评论 0 3
  • 每个 Android 应用进程在创建时,会同时创建一个线程,我们称之为主线程,负责更新 UI 界面以及和处理用户之...
    cspecialy阅读 1,194评论 0 16
  • 习惯用惊异的目光 打量光阴荏苒 比如花开,比如叶落 比如燕衔初泥 比如鸿掠轻寒 比如腮帮新添的一根白须 海岸还不怎...
    琴弦依旧阅读 172评论 0 0