ExecutorService 接口继承 Executor 接口,后者只有一个executor() 方法;前者则定义了shutdown()结束线程,submit()提交任务线程,isTerminated()任务线程已结束等方法。

ExecutorService 则可以使用线程池工具类 Executors 类提供的各种创建线程池的方法,

1)Executors.newSingleThreadPool() 方法创建 SingleThreadPool,单一线程池,即线程池里只有一个线程,可以用于任务需要串行执行的场景。

2)Executors.newFixedThreadPool(int n) 方法创建包含指定个数线程的线程池。

3)Executors.newCachedThreadPool()方法创建的线程池没有对线程个数进行限制,来一个任务就会创建一个线程并执行这个任务。

4)Executors.newScheduledThreadPool(int n)方法创建定时任务线程池,用于周期或者延迟执行任务。

newFixedThreadPool的具体使用例子如下:

1)首先定义一个任务线程

public class Task implements Runnable {private String name;Task(String name) {this.name = name;}@Overridepublic void run() {System.out.println(Thread.currentThread().getName() + " Start." + name);try {TimeUnit.SECONDS.sleep(5);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName() + " End.");}@Overridepublic String toString() {return this.name;}
}

2)然后使用线程池

public class FixedThreadPool {public static void main(String[] args) {ExecutorService executor = Executors.newFixedThreadPool(5);for (int i = 0; i < 10; i++) {Task task = new Task(i + "");executor.execute(task);}// 结束executor.shutdown();// 线程全部执行完毕while (!executor.isTerminated()) {}System.out.println("All threads are finished!");}
}

Java 并发编程之线程池 ExecutorService 接口相关推荐

  1. [转]Java并发编程:线程池的使用

    Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了, ...

  2. Java并发编程:线程池的使用

    在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统 ...

  3. 【Java 并发编程】线程池机制 ( ThreadPoolExecutor 线程池构造参数分析 | 核心线程数 | 最大线程数 | 非核心线程存活时间 | 任务阻塞队列 )

    文章目录 前言 一.ThreadPoolExecutor 构造参数 二.newCachedThreadPool 参数分析 三.newFixedThreadPool 参数分析 四.newSingleTh ...

  4. 【Java 并发编程】线程池机制 ( 线程池示例 | newCachedThreadPool | newFixedThreadPool | newSingleThreadExecutor )

    文章目录 前言 一.线程池示例 二.newCachedThreadPool 线程池示例 三.newFixedThreadPool 线程池示例 三.newSingleThreadExecutor 线程池 ...

  5. (转)Java并发编程:线程池的使用

    背景:线程池在面试时候经常遇到,反复出现的问题就是理解不深入,不能做到游刃有余.所以这篇博客是要深入总结线程池的使用. ThreadPoolExecutor的继承关系 线程池的原理 1.线程池状态(4 ...

  6. Java并发编程一线程池简介

    推荐:Java并发编程汇总 Java并发编程一线程池简介 为什么我们需要使用线程池? 我们知道线程是一种比较昂贵的资源,我们通过程序每创建一个线程去执行,其实操作系统都会对应地创建一个线程去执行我们的 ...

  7. Java并发编程一线程池的五种状态

    推荐:Java并发编程汇总 Java并发编程一线程池的五种状态 原文地址 Java多线程线程池(4)–线程池的五种状态 正文 线程池的5种状态:Running.ShutDown.Stop.Tidyin ...

  8. Java并发编程之线程池及示例

    1.Executor 线程池顶级接口.定义方法,void execute(Runnable).方法是用于处理任务的一个服务方法.调用者提供Runnable 接口的实现,线程池通过线程执行这个 Runn ...

  9. Java并发编程-ThreadPool线程池

    ThreadPool线程池 1.线程池的优势 1.1.引言 1.2.为什么要使用线程池 2.线程池的使用 2.1.架构说明 2.2.线程池的三大方法 2.2.1.newFixedThreadPool( ...

最新文章

  1. PHP 项目中单独使用 Laravel Eloquent 查询语句来避免 SQL 注入
  2. 路由器上的usb接口有什么用_路由器上面的USB接口有什么用途,你都知道吗?
  3. android-Vibrator的使用
  4. linux rundeck crontab格式
  5. 嵌入式 Linux 入门 环境篇(四、必备开发工具安装)
  6. element ul 日期插件
  7. 零基础如何搭建个人网站,附完整建站步骤!
  8. 如何在word中的方框中打勾
  9. 获取所有选中的复选框
  10. 数据库中1NF,2NF,3NF的判别
  11. 湖人行--(kobe bryant)
  12. H.265网页播放器EasyPlayer获取视频流正常,但是播放出现黑屏是什么原因?
  13. ArrayMap 源码解析
  14. 六、Django-Registration-Redux的基本使用
  15. 短视频App源码:如何搭建短视频社区
  16. 招商银行信用卡中心实习生招聘(第二批)题解
  17. 根据年份和月份判断该月的天数,例如,1900年是平年,则2月份有28天,2000年是闰年,则2月份有29天。 闰年的条件:year除以400能整除,或者year除以4能整除,但是不能是100的倍数
  18. “数学黑洞”:任意一个4位自然数,将组成该数的各位数字重新排列,形成一个最大数和一个最小数,之后两数相减,其差仍为一个自然数。重复进行上述运算,最终会出现一个神秘的数,请编程输出这个神秘的数。
  19. 发送手机短信获取验证码功能
  20. WinDebug使用

热门文章

  1. php下xmlwriter,PHP实现基于XMLWriter操作xml的方法
  2. linux多线程加解锁
  3. PBRT中的误差舍入管理(浮点运算)
  4. java 指代对象_06JAVA面向对象之封装
  5. UNREAL ENGINE 4.13 正式发布!
  6. UE4 蓝图RandomStreams
  7. 更新一波,微信第三方开发平台授权流程
  8. 3.2 Spring AOP的设计与实现
  9. 多线程之并发基础(四)
  10. 内核中的UDP socket流程(11)——ip_append_data