java线程池原理、阻塞队列还不会?

 

一、线程池定义和使用

jdk 1.5 之后就引入了线程池。

1.1 定义

从上面的空间切换看得出来,线程是稀缺资源,它的创建与销毁是一个相对偏重且耗资源的操作,而Java线程依赖于内核线程,创建线程需要进行操作系统状态切换。为避免资源过度消耗需要设法重用线程执行多个任务。线程池就是一个线程缓存,负责对线程进行统一分配、调优与监控。(数据库连接池也是一样的道理)

什么时候使用线程池?

单个任务处理时间比较短;需要处理的任务数量很大。

线程池优势?

  • 重用存在的线程,减少线程创建、消亡的开销,提高性能、提高响应速度。
  • 当任务到达时,任务可以不需要等到线程创建就能立即执行。
  • 提高线程的可管理性,可统一分配,调优和监控。

 

1.2 线程池在 jdk 已有的实现

 

  • 在 juc 包下,有一个接口:Executor :
  • Executor 又有两个子接口:ExecutorService 和 ScheduledExecutorService,常用的接口是 ExecutorService。
  • 同时常用的线程池的工具类叫 Executors。

例如:

ExecutorService service = Executors.newCachedThreadPool();

Executor 框架虽然提供了如 newFixedThreadPool()、newSingleThreadExecutor()、newCachedThreadPool()、newScheduledThreadPool() 等创建线程池的方法,但都有其局限性,不够灵活。

上面的几中方式点进去会发现,都是用 ThreadPoolExecutor 进行创建的:

  1. newSingleThreadExecutor 字面意思 简单线程执行器

java线程池原理、阻塞队列还不会?

 

  1. newFixedThreadPool 字面意思固定的线程池,传参就是线程固定数目,适用于执行长期任务的场景。

java线程池原理、阻塞队列还不会?

 

  1. newCachedThreadPool 字面意思 缓存线程池,核心线程0,最大线程非常大,动态创建的特点。

java线程池原理、阻塞队列还不会?

 

  1. newScheduledThreadPool 字面意思 时间安排线程池,指定核心线程数。

java线程池原理、阻塞队列还不会?

 

java线程池原理、阻塞队列还不会?

 

  1. newSingleThreadScheduledExecutor 字面意思 单线程安排执行器,也就是基于只有一个核心线程的执行器之外,又可以扩展。其中又用 DelegatedEx
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值