Java并发编程之Executor接口的使用


Posted in Java/Android onJune 21, 2021

一、Executor接口的理解

  • Executor属于java.util.concurrent包下;
  • Executor是任务执行机制的核心接口

二、Executor接口的类图结构

Java并发编程之Executor接口的使用

由类图结构可知:

  • ThreadPoolExecutor 继承了AbstractExecutorService接口;
  • AbstractExecutorService接口实现了ExecutorService接口;
  • ExecutorService继承了Executor接口;
  • 因此以下部分主要讲解ThreadPoolExecutor类。

三、Executor接口中常用的方法

void execute(Runnable command) 在将来的某个时间执行给定的命令。 该命令可以在一个新线程,一个合并的线程中或在调用线程中执行,由Executor实现。

四、线程池的创建分为两种方式(主要介绍通过ThreadPoolExecutor方式)

注:通过Executors类的方式创建线程池,参考lz此博文链接https://www.3water.com/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.*;

/**
 * @description:
 * @author: xz
 * @create: 2021-06-16 22:16
 */
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();
                    }
                }
            });
        }
    }
}

输出结果如下图

Java并发编程之Executor接口的使用

结论:无论是创建何种类型线程池(newFixedThreadPool、newSingleThreadExecutor、newCachedThreadPool等等),均会调用ThreadPoolExecutor构造函数。

Java并发编程之Executor接口的使用
Java并发编程之Executor接口的使用

到此这篇关于Java并发编程之Executor接口的使用的文章就介绍到这了,更多相关Java Executor接口内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Java/Android 相关文章推荐
mybatis 解决从列名到属性名的自动映射失败问题
Jun 30 Java/Android
在Spring-Boot中如何使用@Value注解注入集合类
Aug 02 Java/Android
springboot+WebMagic+MyBatis爬虫框架的使用
Aug 07 Java/Android
java如何实现socket连接方法封装
Sep 25 Java/Android
使用jpa之动态插入与修改(重写save)
Nov 23 Java/Android
Java 通过手写分布式雪花SnowFlake生成ID方法详解
Apr 07 Java/Android
零基础学java之方法的定义与调用详解
Apr 10 Java/Android
IDEA 2022 Translation 未知错误 翻译文档失败
Apr 24 Java/Android
Java设计模式中的命令模式
Apr 28 Java/Android
Java实现扫雷游戏详细代码讲解
May 25 Java/Android
Springboot集成kafka高级应用实战分享
Aug 14 Java/Android
Spring boot实现上传文件到本地服务器
Aug 14 Java/Android
深入理解以DEBUG方式线程的底层运行原理
浅谈什么是SpringBoot异常处理自动配置的原理
SpringAop日志找不到方法的处理
详解SpringBoot异常处理流程及原理
Java新手教程之ArrayList的基本使用
Java各种比较对象的方式的对比总结
Jun 20 #Java/Android
Java Optional<Foo>转换成List<Bar>的实例方法
Jun 20 #Java/Android
You might like
PHP 查找字符串常用函数介绍
2012/06/07 PHP
PHP中使用asort进行中文排序失效的问题处理
2014/08/18 PHP
Zend Framework创建自己的动作助手详解
2016/03/05 PHP
Yii2使用自带的UploadedFile实现的文件上传
2016/06/20 PHP
PHP中关于php.ini参数优化详解
2020/02/28 PHP
IE和firefox浏览器的event事件兼容性汇总
2009/12/06 Javascript
JS实现Enter键跳转及控件获得焦点
2013/08/12 Javascript
javascript实现yield的方法
2013/11/06 Javascript
jQuery删除节点的三个方法即remove()detach()和empty()
2013/12/27 Javascript
javaScript年份下拉列表框内容为当前年份及前后50年
2014/05/28 Javascript
jQuery中checkbox反复调用attr('checked', true/false)只有第一次生效的解决方法
2016/11/16 Javascript
Vue+Flask实现简单的登录验证跳转的示例代码
2018/01/13 Javascript
angular6根据environments配置文件更改开发所需要的环境的方法
2019/03/06 Javascript
在vue和element-ui的table中实现分页复选功能
2019/12/04 Javascript
vue使用原生swiper代码实例
2020/02/05 Javascript
《javascript设计模式》学习笔记七:Javascript面向对象程序设计组合模式详解
2020/04/08 Javascript
Python自定义函数的创建、调用和函数的参数详解
2014/03/11 Python
Python获取邮件地址的方法
2015/07/10 Python
Python 模拟购物车的实例讲解
2017/09/11 Python
Python中使用支持向量机SVM实践
2017/12/27 Python
Django框架实现分页显示内容的方法详解
2019/05/10 Python
在Pycharm中使用GitHub的方法步骤
2019/06/13 Python
解决pytorch-yolov3 train 报错的问题
2020/02/18 Python
Python socket服务常用操作代码实例
2020/06/22 Python
canvas实现按住鼠标移动绘制出轨迹的示例代码
2018/02/05 HTML / CSS
英国首屈一指的票务公司:See Tickets
2019/05/11 全球购物
巴西本土电商平台:Americanas
2020/06/21 全球购物
威盛公司软件C++工程师笔试题面试题
2012/07/16 面试题
别名指示符是什么
2012/10/08 面试题
Unix里面如何在后台运行程序
2016/10/14 面试题
学校十一活动方案
2014/02/01 职场文书
小学音乐课歌曲《堆雪人》教学反思
2016/02/18 职场文书
多人股份制合作协议书
2016/03/19 职场文书
如何让2019年上半年的工作总结更出色!
2019/07/01 职场文书
Jupyter notebook 更改文件打开的默认路径操作
2021/05/21 Python
MySQL 四种连接和多表查询详解
2021/07/16 MySQL