一篇带你了解ScheduledExecutorService的用法和适用场景

news2024/11/18 14:41:37

希望文章能给到你启发和灵感~
如果觉得文章对你有帮助的话,点赞 + 关注+ 收藏 支持一下博主吧~

阅读指南

  • 开篇说明
  • 一、ScheduledExecutorService的作用
  • 二、ScheduledExecutorService的使用
    • 2.1 常用方法
    • 2.2 如何关闭释放资源
  • 三、最后

开篇说明

ExecutorService大家应该不会陌生,他是是Java中用于管理和执行线程的高级工具,而今天我们说的ScheduledExecutorService是Java中用于调度任务的接口。具体来说,它是ExecutorService的子接口,扩展了线程池的功能,允许在预定的时间执行任务,也可以周期性地重复执行任务;

在这里插入图片描述

一、ScheduledExecutorService的作用

作用:

  • 在指定的延迟后执行特定的任务。
  • 按照固定的时间间隔重复执行特定的任务。
  • 提供了线程池的功能,用于更好地管理和控制线程的生命周期

二、ScheduledExecutorService的使用

2.1 常用方法

方法:

  • schedule(Runnable command, long delay, TimeUnit unit)

在给定的延迟之后运行命令。只执行一次,第一个参数定义你要执行任务线程,第二个参数是延迟的时间,第三个参数是时间单位,可以是秒,可以分,小时,天等等;

		// 创建一个单线程的ScheduledExecutorService  
        ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();  
  
        // 定义一个Runnable任务  
        Runnable task = new Runnable() {  
            @Override  
            public void run() {  
                System.out.println("执行我的线程逻辑");  
            }  
        };  
        // 使用schedule方法,在5秒后执行任务  
        executor.schedule(task, 5, TimeUnit.SECONDS); 
  • scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)

在指定的初始延迟后开始执行任务,并按照固定的时间间隔重复执行。多了一个间隔时间参数

		ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);  
  
        // 定义一个Runnable任务  
        Runnable task = new Runnable() {  
            @Override  
            public void run() {  
                System.out.println("执行我的线程逻辑");  
            }  
        };  
  
        // 使用scheduleAtFixedRate方法,首次延迟0秒执行,之后每隔2秒执行一次  
        // 注意:如果任务执行时间超过间隔,那么下一次任务将立即开始,而不会等待上一个任务完成  
        executor.scheduleAtFixedRate(task, 0, 2, TimeUnit.SECONDS);
  • scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)

在指定的初始延迟后开始执行任务,并在每次执行完成后等待给定的延迟时间,然后再次执行任务

		ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);  
  
        // 定义一个Runnable任务  
        Runnable task = new Runnable() {  
            @Override  
            public void run() {  
                System.out.println("执行我的线程逻辑");  
            }  
        };  
		// 首次延迟0秒执行,之后每次在上一个任务执行完成后延迟1秒执行  
		executor.scheduleWithFixedDelay(task, 0, 1, TimeUnit.SECONDS);

2.2 如何关闭释放资源

需要注意的是:

如果我们的任务执行完成后,需要有一个关闭的动作,就如同我们操作完流后都会执行一下close一样,虽然即使不关闭,Java自身的JVM也会帮我们回收,但是被动的操作就会有可能造成内存的泄漏的风险;

	// 当不再需要执行器时,关闭它,但不会立即关闭,而是等待所有任务完成才去执行关闭  
	executor.shutdown();   
	// 如果需要立即关闭并尝试中断任务
	executor.shutdownNow();
	// 指定等待时间来等待执行完成  
	executor.awaitTermination(long timeout, TimeUnit unit) // 如果在等待时间内执行器成功关闭,该方法将返回true;否则返回false

根据关闭的几个方法特性,我们可以根据实际使用场景来搭配使用;

三、最后

ExecutorService 和ScheduledExecutorService 的区别和共同点

【1】两者都是Java中用于管理和控制线程的重要接口

【2】ExecutorService允许提交任务并控制它们如何运行,但不提供定时或周期性任务的功能

【3】ScheduledExecutorService 是ExecutorService的子接口,是他的一个扩展;

【4】针对需求中要周期性执行的,或者一定延迟执行的任务场景,我们就能使用该接口来实现;
【5】使用ScheduledExecutorService时,需要注意任务执行时间可能超过指定的时间间隔,特别是当使用scheduleAtFixedRate方法时。如果任务执行时间超过间隔时间,该方法会立即开始下一个任务,可能导致任务连续执行;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1884100.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SAPUI5基础知识10 - i18与国际化

1. 背景 i18n 是 “internationalization” 的缩写,其中的 18 是 “internationalization” 这个单词中间的字符数。i18n 是一种让应用程序支持多种语言的方法,也就是我们通常所说的国际化。 在SAPUI5中,i18n主要通过使用资源模型&#xff…

基于Java平价平价汽车租赁系统设计和实现(源码+LW+部署讲解)

💗博主介绍:✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,…

一、课程介绍,基础—环境安装、判断、循环语句等(爬虫及数据可视化)

一、课程介绍,基础—环境安装、判断、循环语句等(爬虫及数据可视化) 1. 课程介绍1.1 相关内容1.2 学习目标1.3 学习内容安排 2. python2.1 环境配置2.2 标识符和关键字2.3 运算符2.4 判断语句2.5 循环语句 1. 课程介绍 1.1 相关内容 10天的…

一文了解IP地址冲突的起因与解决方案

IP 地址冲突是困扰网络管理员影响网络的正常运行的常见因素。深入理解并有效解决 IP 地址冲突故障对于维护网络的高效稳定运行具有重要意义。 一、IP 地址冲突的原因 (一)人为配置错误 网络用户在手动配置 IP 地址时,对网络配置了解不多用户…

HarmonyOS开发探索:父子组件手势绑定问题处理

场景一:父子组件同时绑定手势的冲突处理 效果图 方案 在默认情况下,手势事件为非冒泡事件,当父子组件绑定相同的手势时,父子组件绑定的手势事件会发生竞争,最多只有一个组件的手势事件能够获得响应,默认子…

数据结构笔记第3篇:双向链表

1、双向链表的结构 注意:这里的 "带头" 跟前面我们说的 "头结点" 是两个概念,实际前面的在单链表阶段称呼不严谨,但是为了同学们更好的理解就直接称为单链表的头结点。 带头链表里的头结点,实际为 "哨兵…

# 职场生活之道:善于团结

在职场这个大舞台上,每个人都是演员,也是观众。要想在这个舞台上站稳脚跟,除了专业技能,更要学会如何与人相处,如何团结他人。团结,是职场生存的重要法则之一。 1. 主动团结:多一个朋友&#x…

UE5(c++)开发日志(3):将前面写的输出日志的方法进行封装

Public下新增一个c类: 选择无属性,因为不需要添加任何东西进去, 也不需要借助里面任何东西。 创建一个命名空间Debug,可以在命名空间内写一点静态方法 : namespace Debug{} static void Print(const FString& message, con…

试用笔记之-汇通汉诺塔-益智游戏

首先下载汇通汉诺塔: http://www.htsoft.com.cn/download/HanoiTower.rar 汇通汉诺塔游戏规则:把X轴的圈圈都移到Z轴过关。 还可以选择自动游戏哦,看看AI机器人玩汇通汉诺塔

前程无忧滑块

声明(lianxi a15018601872) 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 前言(lianxi …

启智畅想火车集装箱箱号识别系统,同时识别车皮号、火车底盘号码

1、应用背景 在现代物流体系中,铁路集装箱运输扮演着举足轻重的角色,目前各个铁路系统在管理集装箱车厢进出站时,方法传统,采用人工登记集装箱箱号、车皮号以及火车底盘号码的方式,效率低、错误率高、人员工作量大、信…

湖北大学2024年成人高考函授报名专升本会计学专业介绍

湖北大学,这所坐落于历史文化名城武汉的高等学府,自其创立之初,便秉持着“厚德博学,求是创新”的校训,致力于培养一代又一代的优秀人才。而今,为满足广大社会人士对高等教育的渴求,特别是那些已…

新的里程碑丨deepin校园联盟在拉丁美洲自由软件节上的国际风采

deepin校园联盟秉持推广开源文化与技术的宗旨,在全球技术交流的洪流中,再次于海外掀起热烈浪潮。在厄瓜多尔雅才理工大学(Yachay Tech University),deepin校园联盟大使Mosquera率领团队,跨越数百公里之遥&a…

Jenkins教程-12-发送html邮件测试报告

上一小节我们学习了发送钉钉测试报告通知的方法,本小节我们讲解一下发送html邮件测试报告的方法。 1、自动化用例执行完后,使用pytest_terminal_summary钩子函数收集测试结果,存入本地status.txt文件中,供Jenkins调用 #conftest…

Optional类方法

Optional类 方法empty()方法of(T value)ofNullable(T value)filter(Predicate<? super T> predicate)get()ifPresent(Consumer<? super T> consumer)isPresent()map(Function<? super T,? extends U> mapper)orElse(T other)orElseGet(Supplier<? ex…

如何实现Action菜单

文章目录 1. 概念介绍2. 思路与方法2.1 实现思路2.2 实现方法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"自定义标题栏"相关的内容&#xff0c;本章回中将介绍自定义Action菜单.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在这里提到的…

Swift 中的 StoreKit 测试

文章目录 前言创建一个 StoreKit Demo使用 SKTestSessionaskToBuyEnabled 属性总结前言 StoreKit 框架的第二次迭代是我在过去几年中应用程序中最重大的变化。最近版本的 StoreKit 框架已完全采用了 Swift 语言特性,如 async 和 await。本篇内容我们将讨论 StoreKitTest 框架…

AutoGen 两个agent讲相声

Lesson 1: Multi-Agent Conversation and Stand-up Comedy 第 1 课&#xff1a;多人对话和单口相声 Setup from utils import get_openai_api_key OPENAI_API_KEY get_openai_api_key() llm_config {"model": "gpt-3.5-turbo"}Define an AutoGen agent…

教育心理学期末考试重点

人本主义学习理论 人本主义主张&#xff0c;心理学应当把人作为一个整体来研究&#xff0c;而不是将人的心理肢解为不完整的几个部分&#xff0c;应该研究正常的人&#xff0c;而且更应该关注人的高级心理活动&#xff0c;如热情、信念、生命、尊严等内容。人本主义的学习理论…

线性代数|机器学习-P20鞍点和极值

文章目录 1 . 瑞利商的思考1.1 瑞利商的定义1.2 投影向量 2. 拉格朗日乘子法3. 鞍点4. 线性拟合4.1 范德蒙矩阵线性拟合4.2 python 代码4.3 范德蒙矩阵缺点 5. 均值和方差5.1 样本均值和方差5.2 总体期望 μ \mu μ,总体方差 σ 2 \sigma^2 σ2 1 . 瑞利商的思考 1.1 瑞利商…