Java并发编程之Executor接口的使用
短信预约 -IT技能 免费直播动态提醒
一、Executor接口的理解
- Executor属于java.util.concurrent包下;
- Executor是任务执行机制的核心接口;
二、Executor接口的类图结构
由类图结构可知:
- ThreadPoolExecutor 继承了AbstractExecutorService接口;
- AbstractExecutorService接口实现了ExecutorService接口;
- ExecutorService继承了Executor接口;
- 因此以下部分主要讲解ThreadPoolExecutor类。
三、Executor接口中常用的方法
void execute(Runnable command) 在将来的某个时间执行给定的命令。 该命令可以在一个新线程,一个合并的线程中或在调用线程中执行,由Executor实现。
四、线程池的创建分为两种方式(主要介绍通过ThreadPoolExecutor方式)
注:通过Executors类的方式创建线程池,参考lz此博文链接https://www.jb51.net/article/215163.htm
1.ThreadPoolExecutor类中的构造方法
public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue workQueue,defaultHandler)
2、 ThreadPoolExecutor类中构造函数的参数解析
- corePoolSize 核心线程最大数量,通俗点来讲就是,线程池中常驻线程的最大数量
- maximumPoolSize 线程池中运行最大线程数(包括核心线程和非核心线程)
- keepAliveTime线程池中空闲线程(仅适用于非核心线程)所能存活的最长时间
- unit 存活时间单位,与keepAliveTime搭配使用
- workQueue 存放任务的阻塞队列
- handler 线程池饱和策略
3、ThreadPoolExecutor类创建线程池示例
代码
package com.xz.thread.executor;
import java.util.concurrent.*;
public class Demo {
public static void main(String[] args) {
ThreadPoolExecutor pool = new ThreadPoolExecutor(3,3,
1L, TimeUnit.MINUTES,new LinkedBlockingDeque<>());
for(int i=1;i<=5;i++){
pool.execute(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName());
try {
Thread.sleep(1000);
System.out.println("睡眠一秒钟");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
}
}
}
输出结果如下图
结论:无论是创建何种类型线程池(newFixedThreadPool、newSingleThreadExecutor、newCachedThreadPool等等),均会调用ThreadPoolExecutor构造函数。
到此这篇关于Java并发编程之Executor接口的使用的文章就介绍到这了,更多相关Java Executor接口内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341