首页 > 编程语言 > 详细

Java线程池面试

时间:2019-09-08 20:06:15      阅读:104      评论:0      收藏:0      [点我收藏+]

New Thread的弊端

  • 每次new Thread会新建对象,性能差
  • 线程缺乏统一管理,可能无限制的新建线程,相互竞争,有可能占用过多系统资源导致死机或OOM
  • 缺少更多功能,如更多执行、定期执行、线程中断

线程池优点

  • 重用存在的线程,减少对象创建、消亡的开销
  • 可有效控制最大并发线程数,提高系统资源利用率,同时可以避免过多资源竞争,避免阻塞
  • 提供定时执行、定期执行、单线程、并发数控制等功能

ThreadPoolExcutor的参数

ThreadPoolExcutor: 线程池,可以通过调用 Executors 以下静态工厂方法来创建线程池并返回一个 ExecutorService 对象。

  • corePoolSize: 核心线程数量
  • maximumPoolSize: 允许创建的最大线程数
  • workQueue: 阻塞队列,存储等待执行的任务(重要)
  • keepAliveTime: 线程没有任务执行时最多保持多久时间终止
  • unit: keepAliveTime的时间单位(DAYS HOURS MINUTES MILLISECONDS MICROSECONDS NANOSECONDS)
  • threadFactory: 线程工厂,用来创建线程
  • rejectHandler: 当拒绝处理任务时的策略

ThreadPoolExcutor的重要方法

  • execute() 向线程池提交一个任务,交由线程池去执行
  • submit() 也是用来向线程池提交任务的,但是它能够返回任务执行的结果,实际上还是调用的 execute()方法
  • shutdown() 关闭线程池,等待任务都执行完
  • shutdownNow() 关闭线程池,不等待任务都执行完

常见的线程池及使用场景

  • newSingleThreadExecutor

创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序执行。用于需要保证顺序执行的场景,并且只有一个线程在执行。

  • newFixedThreadPool

创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。用于已知并发压力的情况下,对线程数做限制。

  • newCachedThreadPool

创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。比较适合处理执行时间比较小的任务。

  • newScheduledThreadPool

创建一个定长线程池,支持定时及周期性任务执行。适用于需要多个后台线程执行周期任务的场景。

  • newWorkStealingPool

一个拥有多个任务队列的线程池,可以减少连接数,创建当前可用cpu数量的线程来并行执行。

Java线程池面试

原文:https://www.cnblogs.com/flyuz/p/11487670.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!