笔记-线程池的实现原理分析.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
什么是线程池 在 Java 中,如果每个请求到达就创建一个新线程,创建和销毁线程花费的时间和消耗的系统 资源都相当大,甚至可能要比在处理实际的用户请求的时间和资源要多的多。 如果在一个 Jvm 里创建太多的线程,可能会使系统由于过度消耗内存或“切换过度”而导致系 统资源不足 为了解决这个问题,就有了线程池的概念,线程池的核心逻辑是提前创建好若干个线程放在一 个容器中。如果有任务需要处理,则将任务直接分配给线程池中的线程来执行就行,任务处 理完以后这个线程不会被销毁,而是等待后续分配任务。同时通过线程池来重复管理线程还 可以避免创建大量线程增加开销。 线程池的优势 合理的使用线程池,可以带来一些好处 1. 降低创建线程和销毁线程的性能开销 2. 提高响应速度,当有新任务需要执行是不需要等待线程创建就可以立马执行 3. 合理的设置线程池大小可以避免因为线程数超过硬件资源瓶颈带来的问题 Java 中提供的线程池API 我相信有很多同学或多或少都接触过线程池,也可能自己也研究过线程池的原理。前面部分 的内容会相对简单点,但是要想合理的使用线程池,那么势必要对线程池的原理有比较深的 理解 线程池的使用 要了解一个技术,我们仍然是从使用开始。JDK 为我们提供了几种不同的线程池实现。我们 先来通过一个简单的案例来引入线程池的基本使用 在 Java 中怎么创建线程池呢?下面这段代码演示了创建三个固定线程数的线程池 public class Test implements Runnable{ @Override public void run() { try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName()); } static ExecutorService service=Executors.newFixedThreadPool (3); public static void main(String[] args) { for (int i=0;i100;i++) { service.execute(new Test()); } service.shutdown(); } } Java 中提供的线程池Api 为了方便大家对于线程池的使用,在 Executors 里面提供了几个线程池的工厂方法,这样, 很多新手就不需要了解太多关于 ThreadPoolExecutor 的知识了,他们只需要直接使用 Executors 的工厂方法,就可以使用线程池: newFixedThreadPool :该方法返回一个固定数量的线程池,线程数不变,当有一个任务提交 时,若线程池中空闲,则立即执行,若没有,则会被暂缓在一个任务队列中,等待有空闲的 线程去执行。 newSingleThreadExecutor: 创建一个线程的线程池,若空闲则执行,若没有空闲线程则暂缓 在任务队列中。 newCachedThreadPool :返回一个可根据实际情况调整线程个数的线程池,不限制最大线程 数量,若用空闲的线程则执行任务,若无任务则不创建线程。并且每一个空闲线程会在 60 秒 后自动回收 newScheduledThreadPool: 创建一个可以指定线程的数量的线程池,但是这个线程池还带有 延迟和周期性执行任务的功能,类似定时器。 ThreadpoolExecutor 上面提到的四种线程池的构建,都是基于 ThreadpoolExecutor 来构建的,小伙伴们打起精神 来了,接下来将一起了解一下面试官最喜欢问到的一道面试题“请简单说下你知道的线程池和 ThreadPoolThread 有哪些构造参数” public static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS,

文档评论(0)

文人教参 + 关注
实名认证
文档贡献者

老师教学,学生学习备考课程、成人语言培训课程及教材等为提升学生终身学习竞争力,塑造学生综合能力素质,赋能学生而努力

版权声明书
用户编号:6103150140000005

1亿VIP精品文档

相关文档