java并发编程(初识):Executor、ExecutorService、Executors

H265/HEVC视频分层码流分析语义元素解释 一、H265概述 H265/HEVC(Hight Efficiency Video Coding)是由ITU-T和ISO/IEC两大组织在H264/AVC的基础之上推出的新一代高效视频编码标准,主要为应对高清和超高清视频在网络传输和数据存储方面带来的挑战。上一篇文章对H264/AVC视频码流进行了详细的分析,本文继续从数据处理的角度对H265/HEVC视频码流进行详细分析。 二、H265分层结构 H265的分层结构与H264类似,分为视频编码层(VCL:Video Code Layer)和网络抽象层(NAL 阅读详情

Executor:

public interface Executor {
    void execute(Runnable command);
}

一、Executor:一个接口,其定义了一个接收Runnable对象的方法execute(Runnable command),该方法接收一个Runable实例,它用来执行一个任务,任务即一个实现了Runnable接口的类,一般来说,Runnable任务开辟在新线程中的使用方法为:new Thread(new RunnableTask())).start();但在Executor中,可以使用Executor而不用显示地创建线程:executor.execute(new RunnableTask()); // 异步执行

二、ExecutorService:是一个比Executor使用更广泛的子类接口,其提供了生命周期管理的方法,返回 Future 对象,以及可跟踪一个或多个异步任务执行状况返回Future的方法;

  • 调用ExecutorService的shutdown()方法来平滑地关闭 ExecutorService,调用该方法后,将导致ExecutorService停止接受任何新的任务且等待已经提交的任务执行完成(已经提交的任务会分两类:一类是已经在执行的,另一类是还没有开始执行的),当所有已经提交的任务执行完毕后将会关闭ExecutorService。因此我们一般用该接口来实现和管理多线程。
  • 通过 ExecutorService.submit() 方法返回的 Future 对象,可以调用 isDone() 方法查询Future是否已经完成。当任务完成时,它具有一个结果,你可以调用get()方法来获取该结果。你也可以不用isDone()进行检查就直接调用get()获取结果,在这种情况下,get() 将阻塞,直至结果准备就绪,还可以取消任务的执行。Future 提供了 cancel() 方法用来取消执行 pending 中的任务。

三、Executors类: 主要用于提供线程池相关的操作,提供了一系列工厂方法用于创建线程池,返回的线程池都实现了ExecutorService接口。

  1. public static ExecutorService newFiexedThreadPool(int Threads) :创建固定数目线程的线程池。
  2. public static ExecutorService newCachedThreadPool():创建一个可缓存的线程池,调用execute 将重用以前构造的线程(如果线程可用)。如果没有可用的线程,则创建一个新线程并添加到池中。终止并从缓存中移除那些已有 60 秒钟未被使用的线程。
  3. public static ExecutorService newSingleThreadExecutor():创建一个单线程化的Executor。
  4. public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize) :创建一个支持定时及周期性的任务执行的线程池,多数情况下可用来替代Timer类。

Executor执行Callable任务 

public class CallableDemo {

    public static void main(String[] args) {
        ExecutorService executorService= Executors.newCachedThreadPool();
        List<Future<String>> resultList=new ArrayList<Future<String>>();

        //创建10个任务并执行
        for(int i=0;i<10;i++){
            //使用ExecutorService执行Callable类型的任务,并将结果保存在future变量中
            Future<String> future=executorService.submit(new TaskWithResult(i));
            resultList.add(future);
        }
        for(Future<String> fs:resultList ){
            try {
                while(!fs.isDone());//没有完成无限循环
                System.out.println(fs.get());
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (ExecutionException e) {
                e.printStackTrace();
                //启动一次顺序关闭,执行以前提交的任务,但是不接受新任务
                executorService.shutdown();
            }
        }

    }
}
class TaskWithResult implements Callable{
    private int id;

    public TaskWithResult(int id) {
        this.id = id;
    }
    @Override
    public String call() throws Exception {
        System.out.println("call()方法被调用了:"+Thread.currentThread().getName());
        return "call()方法被自动调用了,任务返回结果是:"+id+",线程"+Thread.currentThread().getName();
    }
}

参考地址:https://blog.youkuaiyun.com/weixin_40304387/article/details/80508236

小孙学变频学习笔记(二)变频器的逆变电路 本文主要介绍了变频器中逆变电路的核心器件IGBT及其应用。IGBT是一种电压控制型三端半导体开关器件,具有开关频率高、功耗低的优点,在变频器中仅使用截止和饱和导通状态。文章详细分析了IGBT的结构特性、与晶闸管的区别,以及由四个IGBT组成的直流转交流逆变电路原理。重点阐述了IGBT并联反向二极管的作用:提供电流反向通路、避免反向电压损坏器件、提高开关效率等。最后提供了相关学习参考网址供读者进一步研究。 阅读详情

相关推荐

SAP S4HANA F-02报错:更正统一日记账分类账的定制设置

消息号 FINS_ACDOC_CUST201 使用FINS_CUST_CONS_CHK_P去检查公司代码和分类账的设置 提示:过账期间变式为空(分类账 E1/公司代码 7500) 检查了表FINSC_LD_CMP 显示有分类账未分配过账期间变式 解决:后台配置定义分类账和货币类型的设置把过账变式维护下 路径:财务会计→财务会计全局设置→分类账→分类账→定义分类账和货币类型的设置 选中需要维护的分类账双击左侧的“分类账的公司代码设置”,找到对应的公司代码维护上即可。

qq_45068743的博客 6447

【Java线程】Java线程池ExecutorService

// 创建可以容纳3个线程的线程池 ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3); // 线程池的大小会根据执行的任务数动态分配 ExecutorService cachedThreadPool = Executors.newCachedThreadPool(); // 创建单个线程的线程池,

Alpha's 学习笔记 5万+

手把手配置:用Synopsys VDK为英飞凌TC4x系列MCU做虚拟原型开发

本文详细介绍了如何使用Synopsys VDK为英飞凌TC4x系列MCU进行虚拟原型开发,涵盖开发环境搭建、关键外设虚拟化配置、AUTOSAR栈集成及虚拟调试与性能调优全流程。通过虚拟原型技术,开发者可提前6-12个月启动软件开发,显著提升汽车电子项目的开发效率。

weixin_30606461的博客 290

Java的executorservice_Java利用ExecutorService实现同步执行大量线程

自从java1.5以后,官网就推出了Executor这样一个类,这个类,可以维护我们的大量线程在操作临界资源时的稳定性。先上一段代码吧:TestRunnable.javapublic class TestRunnable implements Runnable {private String name;public TestRunnable(String name) {this.name = na...

weixin_30711223的博客 685

基于单片机的室内空气质量监控系统设计

摘 要 I Abstract II 引 言 1 1 控制系统设计 3 1.1 方案选择 3 1.2 系统控制原理 4 2系统硬件设计 5 2.1 单片机的选择与设计 5 2.2 温湿度模块设计 6 2.3 甲醛采集模块设计 8 2.4 显示器模块设计 9 2.5 按键模块设计 10 2.6 报警模块设计 11 2.7 加湿及风扇模块设计 11 3系统软件设计 13 3.1 总流程方案设计 13 3.2 温湿度获取的软件设计 14 3.3 液晶屏LCD1602的软件设计 15 4系统调试 13 4

Q_1928499906的博客 2698

Mask2Former实战:用SwinTransformer+Deformable Attention搞定图像分割三大任务

本文实战解析了Mask2Former模型如何统一解决语义、实例和全景分割三大任务。通过集成Swin Transformer骨干网络与创新的Deformable Attention及Masked Attention机制,详细介绍了模型构建、训练策略及在COCO数据集上的性能表现,为开发者提供了高效的图像分割解决方案。

tech5的博客 245

JAVA并发-ExecutorService

ExecutorService接口,java.util.concurrent.ExecutorService, 代表一种可以在后台并发执行的异步执行机制。在这篇ExecutorService文章中,将解释如何创建ExecutorService,怎么提交任务并执行,怎么获取这些任务的结果,怎么关闭 ExecutorService以及再次使用。 任务委托 下图说明了,线程将任务委托给ExecutorService异步执行: 线程将任务委托给ExecutorS...

成凯的专栏 1393

Apple 网页 SRP 登录系列文章(二):网页参数提取与会话初始化

本文深入解析了Apple网页SRP登录的第一个关键环节。文章首先指出Apple登录页面采用多层安全架构,包括跨域跳转机制和动态参数生成。重点介绍了四种关键参数(ServiceKey、SCNT、FrameId、ServiceNum)的提取技术,通过正则表达式和JSON路径解析从HTML脚本和HTTP头中获取。最后详细说明了会话初始化流程,包括访问初始页面和构建认证URL。这些技术细节揭示了Apple如何通过复杂机制确保登录过程的安全性。

Sayid_Des的专栏 1129

Java 多线程进阶

下断点调试信息,可以看到run()方法当前线程是“main@1”继续运行到run里面,当前线程仍然是“main@1”接下来看一下start()方法运行的线程结果,可以看到是两个线程。

xlsj雪松的博客 415

AI产品经理面试宝典第94天:RAG知识库构建与预处理策略面试指南

本文深入解析RAG知识库构建的核心挑战与预处理策略,涵盖文档格式转换、问答对生成及自动化测试全流程,为AI产品经理提供面试必备的实战方法论与避坑指南,助你精准应对技术深度类问题。

打造全国最全的AI Agent开发知识领域的博客 311

利用dpabi和restplus提取ROI灰质体积学习笔记

目录前言一、数据准备二、利用dpabi提取ROI灰质体积三、restplus提取ROI灰质体积 前言 我利用SPM/CAT12进行灰质、白质、脑脊液分割之后分别已经得到各自的图像文件,在全脑水平已经做了统计分析。如果还想要进一步进行ROI的统计分析或者与量表等临床资料做相关分析,就需要提取ROI灰质体积。几个月没动过这数据了,突然心血来潮想学一下如何提取ROI灰质体积,以此篇博客记录我的提取ROI灰质体积学习过程。提取ROI灰质体积的方法及软件有许多种,本人尝试了dpabi和restplus。 一、数据准备

weixin_52073820的博客 9222

使用ExecutorService,解决多任务同时进行,并等待全部任务完成合并数据

使用ExecutorService,解决多任务同时进行,并等待全部任务完成合并数据一、ExecutorService使用二、Future使用三、功能实现AAAThreadHttpRequestCallable方法结论 一、ExecutorService使用 刚好做项目的时候碰到类似的需求记录一下,具体代码不方便展示用了网上的代码,底下代码是用网上代码修改的,可不可以运行没调试过,只提供大概思路和解...

qq_31405077的博客 6175

微信公众号网页H5跳转小程序实战指南(开放标签wx-open-launch-weapp)微信H5跳转小程序、wx-open-launch-weapp、小程序跳转按钮、微信开放标签、H5打开小程序

跳转小程序(wx-open-launch-weapp)唤起App显示支付按钮等等……而我们这次要用的,就是跳转小程序的标签。场景是否支持服务号网页✅ 支持小程序静态网页托管✅ 支持订阅号❌ 不支持微信外部浏览器❌ 不支持这个“开放标签”功能其实很强大,除了跳转小程序,还有唤起APP、跳支付、调用客服等能力。但可惜资料零散,很多坑等着你亲自踩一遍。这篇文章我整理的流程基本涵盖了从“能不能跳”到“怎么跳”的完整路径,希望你能像我一样省下几个小时的踩坑时间。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1163

重温JAVA线程池精髓:Executor、ExecutorService及Executors的源码剖析与应用指南

在Java并发编程中,线程池是一个非常重要的概念。它可以帮助我们更好地管理和控制线程的使用,避免因为大量线程的创建和销毁带来的性能开销。Java的java.util.concurrent(简称JUC)包中提供了一套丰富的线程池工具,包括Executor接口、ExecutorService接口以及Executors工厂类等。本文将详细介绍这些工具的使用和原理,帮助大家更好地理解和应用Java中的线程池技术

码到三十五 3920

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

java并发编程:Executor、Executors、ExecutorService

Executors    在Java 5之后,并发编程引入了一堆新的启动、调度和管理线程的API。Executor框架便是Java 5中引入的,其内部使用了线程池机制,它在java.util.cocurrent 包下,通过该框架来控制线程的启动、执行和关闭,可以简化并发编程的操作。因此,在Java 5之后,通过Executor来启动线程比使用Thread的start方法更好,除了更易管理,效率更好...

River的博客 8万+

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Java并发编程:Executor、Executors、ExecutorService

自定义线程池,可以用ThreadPool//创建等待队列 BlockingQueue < Runnable > bqueue = new ArrayBlockingQueue < Runnable >(20);//创建线程池,池中保存的线程数为3,允许的最大线程数为5 ThreadPoolExecutor pool = new ThreadPoolExecutor(3 , 5 , 50 , TimeUnit . MILLISECONDS , bqueue);

qq_43842093的博客 1600

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Java 入门指南:Java 并发编程 —— Executor、Executors 构建线程池

Executor 是 Java 并发编程中的一个接口,用于执行异步任务。它定义了一组方法来提交任务并执行它们,以及管理任务的执行状态和结果。 Executor 接口允许将任务提交给执行器,它将负责在后台线程中运行任务并返回结果(如果有)。执行器封装了线程池,可自动管理线程的创建、调度和销毁,从而提供了一种方便的方式来管理并发任务。

热带鱼的技术博客 1918

在 Java 中 Executor 和 Executors 的区别:深入解析与实践指南

Executor是 Java 并发包中的一个核心接口,它用于将任务的提交与实际的执行机制解耦。换句话说,Executor 提供了一种提交任务的统一方式,而不关心任务是如何执行的(例如是新线程、线程池或其他策略)。Executor:接收一个Runnable对象作为参数,并提交该任务进行执行。在 Java 并发编程中,Executor和Executors是非常重要的工具。Executor是一个接口,定义了任务提交的标准,而Executors是一个工具类,提供了用于创建各种类型线程池的便捷方法。在使用。

lssffy的博客 1260

Java多线程之Executor、ExecutorService、Executors、Callable、Future与FutureTask

实现Runnable的类应该被看作一项任务(Task),而不是一个线程(Thread)。在Java多线程中我们一定要有一个明确的概念,任务和线程是不同的概念。可以使用线程(Thread)执行任务(比如实现Runnable的类),但任务不是线程。Java多线程中有两种不同类型的任务,Runnable类型任务(无返回值)与Callable类型任务(有返回值)。Thread只接收Runnable类型的任务。2. 使用Executor执行线程为什么应该使用线程池来执行任务?

2501_90472573的博客 991

线程池学习 ,Executor 与 ExecutorService 和 Executors的区分

Executor Executor, ExecutorService, 和 Executors 最主要的区别是 Executor 是一个抽象层面的核心接口(大致代码如下)。 public interface Executor { void execute(Runnable command); } ExecutorService ExecutorService (也是借口)接口 对 Executor 接口进行了扩展,提供了返回 Future 对象,终止,关闭线程池等方法。当调用 shutDown

weixin_43921491的博客 2438

Executor、ExecutorService 和 Executors 三者的继承关系 和 不同点

Executor,ExecutorService,Executors 最主要的区别是 Executor 是一个抽象层面的 **根接口**。ExecutorService 接口 对 Executor 接口进行了扩展,提供了返回 Future 对象,终止,关闭线程池等方法。当调用 shutDown 方法时,线程池会停止接受新的任务,但会完成正在 pending 中的任务。`Executors` 是一个工具类,类似于 `Collections` 、`Arrays` 等 。提供工厂方法来创建不同类型的线程池,比如

猎人在吃肉 3514

多线程入门到精通系列05: 全面解析Executor, ExecutorService, Executors

为什么这里返回的executor不能调用shutdown()方法?这正是因为没理清Executor和Executors的关系。本文将从核心接口关系讲起,结合实战案例,让你既懂原理又会落地。

changjiangcccc的博客 761

并发编程:Executor、Executors、ExecutorService

并发编程:Executor、Executors、ExecutorService 在Java 5之后引入Executor框架使用了新的启动、调度和管理线程的API, 其内部使用了线程池机制,它在java.util.cocurrent 包下,通过该框架来控制线程的启动、执行和关闭,可以简化并发编程的操作。因此,在Java 5之后,通过Executor来启动线程比使用Thread的start方法更好,除了更易管理,效率更好(用线程池实现,节约开销)外,还有关键的一点:有助于避免this逃逸问题——如果我..

抓娃攻城师 319

java-并发编程Executor、Executors、ExecutorService

Executor 简介 Executor框架便是Java 5中引入的,其内部使用了线程池机制,它在java.util.cocurrent 包下,通过该框架来控制线程的启动、执行和关闭,可以简化并发编程的操作。因此,在Java 5之后,通过Executor来启动线程比使用Thread的start方法更好,除了更易管理,效率更好(用线程池实现,节约开销)外, 还有关键的一点:有助于避免...

aoshanshu6185的博客 186
上一篇: 七种单例
下一篇: ThreadPoolExecutor execute() 工作原理
程序员楂楂
博客等级 码龄9年 17粉丝 70原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值