Java 并发编程之线程池 ExecutorService 接口
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 接口相关推荐
- [转]Java并发编程:线程池的使用
Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了, ...
- Java并发编程:线程池的使用
在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统 ...
- 【Java 并发编程】线程池机制 ( ThreadPoolExecutor 线程池构造参数分析 | 核心线程数 | 最大线程数 | 非核心线程存活时间 | 任务阻塞队列 )
文章目录 前言 一.ThreadPoolExecutor 构造参数 二.newCachedThreadPool 参数分析 三.newFixedThreadPool 参数分析 四.newSingleTh ...
- 【Java 并发编程】线程池机制 ( 线程池示例 | newCachedThreadPool | newFixedThreadPool | newSingleThreadExecutor )
文章目录 前言 一.线程池示例 二.newCachedThreadPool 线程池示例 三.newFixedThreadPool 线程池示例 三.newSingleThreadExecutor 线程池 ...
- (转)Java并发编程:线程池的使用
背景:线程池在面试时候经常遇到,反复出现的问题就是理解不深入,不能做到游刃有余.所以这篇博客是要深入总结线程池的使用. ThreadPoolExecutor的继承关系 线程池的原理 1.线程池状态(4 ...
- Java并发编程一线程池简介
推荐:Java并发编程汇总 Java并发编程一线程池简介 为什么我们需要使用线程池? 我们知道线程是一种比较昂贵的资源,我们通过程序每创建一个线程去执行,其实操作系统都会对应地创建一个线程去执行我们的 ...
- Java并发编程一线程池的五种状态
推荐:Java并发编程汇总 Java并发编程一线程池的五种状态 原文地址 Java多线程线程池(4)–线程池的五种状态 正文 线程池的5种状态:Running.ShutDown.Stop.Tidyin ...
- Java并发编程之线程池及示例
1.Executor 线程池顶级接口.定义方法,void execute(Runnable).方法是用于处理任务的一个服务方法.调用者提供Runnable 接口的实现,线程池通过线程执行这个 Runn ...
- Java并发编程-ThreadPool线程池
ThreadPool线程池 1.线程池的优势 1.1.引言 1.2.为什么要使用线程池 2.线程池的使用 2.1.架构说明 2.2.线程池的三大方法 2.2.1.newFixedThreadPool( ...
最新文章
- PHP 项目中单独使用 Laravel Eloquent 查询语句来避免 SQL 注入
- 路由器上的usb接口有什么用_路由器上面的USB接口有什么用途,你都知道吗?
- android-Vibrator的使用
- linux rundeck crontab格式
- 嵌入式 Linux 入门 环境篇(四、必备开发工具安装)
- element ul 日期插件
- 零基础如何搭建个人网站,附完整建站步骤!
- 如何在word中的方框中打勾
- 获取所有选中的复选框
- 数据库中1NF,2NF,3NF的判别
- 湖人行--(kobe bryant)
- H.265网页播放器EasyPlayer获取视频流正常,但是播放出现黑屏是什么原因?
- ArrayMap 源码解析
- 六、Django-Registration-Redux的基本使用
- 短视频App源码:如何搭建短视频社区
- 招商银行信用卡中心实习生招聘(第二批)题解
- 根据年份和月份判断该月的天数,例如,1900年是平年,则2月份有28天,2000年是闰年,则2月份有29天。 闰年的条件:year除以400能整除,或者year除以4能整除,但是不能是100的倍数
- “数学黑洞”:任意一个4位自然数,将组成该数的各位数字重新排列,形成一个最大数和一个最小数,之后两数相减,其差仍为一个自然数。重复进行上述运算,最终会出现一个神秘的数,请编程输出这个神秘的数。
- 发送手机短信获取验证码功能
- WinDebug使用