浅谈Java四种线程池newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor

来源:互联网 发布:linux mv 覆盖目录 编辑:程序博客网 时间:2024/05/18 17:05

.平时开发过程中,对于线程池的使用,很多都是经过封装好的工具类,使用的时候直接简单的调用即可,有时却没有深入研究封装类里面已经源码的实现,所以这里记录下java四种线程池各自的区别与用法。

最常见的线程使用
new Thread(new Runnable(){
public void run(){
}
}).start();
对于这方方式,有很多问题:
1. 线程没法管理
2. 性能差
3. 没法复用线程
4. 等等

所以这时线程池就起到了作用,java里线程池一般常用到的有一下几种

  1. newSingleThreadExecutor
    创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务, 保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行
    适用场景:任务少 ,并且不需要并发执行
  2. newCachedThreadPool
    创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程.
    线程没有任务要执行时,便处于空闲状态,处于空闲状态的线程并不会被立即销毁(会被缓存住),只有当空闲时间超出一段时间(默认为60s)后,线程池才会销毁该线程(相当于清除过时的缓存)。新任务到达后,线程池首先会让被缓存住的线程(空闲状态)去执行任务,如果没有可用线程(无空闲线程),便会创建新的线程。
    适用场景:处理任务速度 > 提交任务速度,耗时少的任务(避免无限新增线程)
  3. newFixedThreadPool
    创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
  4. newScheduledThreadPool
    创建一个定长线程池,支持定时及周期性任务执行
0 0
原创粉丝点击