个人资源与分享网站:http://xiaocaoshare.com/

Java里面线程池的顶级接口是Executor,但是严格意义上讲Executor并不是一个线程池,而是一个执行线程的工具。真正的线程池接口是ExecutorService.

1.newCachedThreadPool

为每一个任务创建一个线程,并且可以重用已有的线程,无核心线程数量,超过60s的空闲线程将会被启用

/**无参构造方法*/
 public static ExecutorService newCachedThreadPool() {
        return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
                                      60L, TimeUnit.SECONDS,
                                      new SynchronousQueue<Runnable>());
    }
 /**有参的构造方法,可以传入threadFactory*/
 public static ExecutorService newCachedThreadPool(ThreadFactory threadFactory) {
        return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
                                      60L, TimeUnit.SECONDS,
                                      new SynchronousQueue<Runnable>(),
                                      threadFactory);
    }
2.newFixedThreadPool

核心线程数和最大线程数是相同的,无空闲线程,核心线程数无限时要求,可以创建固定大小的线程数量,阻塞队列没有大小限制

/**创建固定大小的线程数*/
public static ExecutorService newFixedThreadPool(int nThreads) {
        return new ThreadPoolExecutor(nThreads, nThreads,
                                      0L, TimeUnit.MILLISECONDS,
                                      new LinkedBlockingQueue<Runnable>());
    }
 
/**创建固定大小的线程数,并可以指定threadFactory*/
 public static ExecutorService newFixedThreadPool(int nThreads, ThreadFactory threadFactory) {
        return new ThreadPoolExecutor(nThreads, nThreads,
                                      0L, TimeUnit.MILLISECONDS,
                                      new LinkedBlockingQueue<Runnable>(),
                                      threadFactory);

3.newScheduledThreadPool

延期和定时执行线程的线程池,固定的核心线程数,最大线程数没有限制,空闲的线程会立即启用

/**创建固定大小的corePool*/
public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize) {
        return new ScheduledThreadPoolExecutor(corePoolSize);
    }
/**查看ScheduledThreadPoolExecutor类,发现是集成的ThreadPoolExecutor*/
 public ScheduledThreadPoolExecutor(int corePoolSize) {
        super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS,
              new DelayedWorkQueue());
    }
/**创建固定大小的corePool,并指定threadFactory*/
 public static ScheduledExecutorService newScheduledThreadPool(
            int corePoolSize, ThreadFactory threadFactory) {
        return new ScheduledThreadPoolExecutor(corePoolSize, threadFactory);
    }
/**查看ScheduledThreadPoolExecutor类,发现是集成的ThreadPoolExecutor*/
 public ScheduledThreadPoolExecutor(int corePoolSize,
                                       ThreadFactory threadFactory) {
        super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS,
              new DelayedWorkQueue(), threadFactory);

4.newSingleThreadExecutor

创建只有一个的核心线程,只处理一个线程,不能处理并发

/**无参*/
public static ExecutorService newSingleThreadExecutor() {
    return new FinalizableDelegatedExecutorService
        (new ThreadPoolExecutor(1, 1,
                                0L, TimeUnit.MILLISECONDS,
                                new LinkedBlockingQueue<Runnable>()));
}
/**指定threadFactory*/
public static ScheduledExecutorService newSingleThreadScheduledExecutor(ThreadFactory threadFactory) {
        return new DelegatedScheduledExecutorService
            (new ScheduledThreadPoolExecutor(1, threadFactory));

}

Java中四种线程池介绍相关推荐

  1. java中四种线程池及poolSize、corePoolSize、maximumPoolSize

    目录 ThreadPoolExecutor重要参数 poolSize.corePoolSize.maximumPoolSize 四种线程池 newFixedThreadPool newCachedTh ...

  2. java中四种线程池的区别

    本文按: 一. 线程池的使用 二. 几种线程池的区别 三. 如何合理配置线程池 一.线程池的使用 在Java中,通常使用Executors 获取线程池.常用的线程池有以下几种: (1)CachedTh ...

  3. Java ExecutorService四种线程池的例子与说明

    1.new Thread的弊端 执行一个异步任务你还只是如下new Thread吗? new Thread(new Runnable() {@Overridepublic void run() {// ...

  4. java 线程工厂_Java并发编程:Java的四种线程池的使用,以及自定义线程工厂

    引言 通过前面的文章,我们学习了Executor框架中的核心类ThreadPoolExecutor ,对于线程池的核心调度机制有了一定的了解,并且成功使用ThreadPoolExecutor 创建了线 ...

  5. Java基础学习总结(85)——Java中四种线程安全的单例模式实现方式

  6. java中executors_Java通过Executors提供四种线程池

    http://cuisuqiang.iteye.com/blog/2019372 Java通过Executors提供四种线程池,分别为: newCachedThreadPool创建一个可缓存线程池,如 ...

  7. [转]new Thread的弊端及Java四种线程池的使用

    介绍new Thread的弊端及Java四种线程池的使用,对Android同样适用.本文是基础篇,后面会分享下线程池一些高级功能. 1.new Thread的弊端 执行一个异步任务你还只是如下new ...

  8. Java多线程系列(五):线程池的实现原理、优点与风险、以及四种线程池实现

    为什么需要线程池 我们有两种常见的创建线程的方法,一种是继承Thread类,一种是实现Runnable的接口,Thread类其实也是实现了Runnable接口.但是我们创建这两种线程在运行结束后都会被 ...

  9. Java 四种线程池

    原文 介绍new Thread的弊端及Java四种线程池的使用,对Android同样适用.本文是基础篇,后面会分享下线程池一些高级功能. 1.new Thread的弊端 执行一个异步任务你还只是如下n ...

最新文章

  1. Java学习之动态代理
  2. 深数据 - Deep Data
  3. gpedit msc组策略面板 win10在哪里_windows10的组策略在哪
  4. jquery学习。。
  5. 编写有效用例电子版_JavaScript ES6代理的实际用例
  6. 人不是被事物本身困扰是什么理论_你常常被负面情绪困扰么?怎么释放和解决负面情绪...
  7. [leetcode]1293. 网格中的最短路径
  8. 机器学习笔记【一】- 线性回归(末):统计学推导以及局部加权线性回归算法实例
  9. Unity 粒子特效(Particle System)大小自适应和层级的一些问题
  10. 权限设计=功能权限+数据权限
  11. oracle 10015 trace name adjust_scn level level_num
  12. 工信部宣布新规,微信支付存在漏洞必须整改,网友:马化腾会赔偿损失吗?
  13. 大学生信息安全(学习笔记一)
  14. errorImg异常图片显示
  15. ps cs6 mac破解方法
  16. CMS是Content Management System的缩写,意为内容管理系统。
  17. 路由器实验之简单交换实现 DHCP配置
  18. 分账系统多少钱?是如何收费的?
  19. emqx开启自定义权限认证
  20. 关于用出生日期查询生日还有多少天的问题

热门文章

  1. C++STL 优先队列priority_queue使用
  2. 推荐并简要分析一个silverlight的相册DEMO--ImageSnipper(V2)
  3. Classloader内存泄露
  4. 如果你的云服务商倒闭该怎么办?
  5. SAP有用的知识(持续更新)
  6. CV00-02-CV基本操作1
  7. java 方法里面定义接口_java – 当接口A在其方法签名中定义接口B时
  8. (C++)1002 A+B for Polynomials
  9. PyInstaller库的使用
  10. 遂宁专业计算机学校,遂宁计算机专业中职学校哪家强