Java中ScheduledExecutorService介绍和使用案例(推荐)

 更新时间:2024年10月24日 11:41:07   作者:王伯爵  
ScheduledExecutorService是Java并发包中的接口,用于安排任务在给定延迟后运行或定期执行,它继承自ExecutorService,具有线程池特性,可复用线程,提高效率,本文主要介绍java中的ScheduledExecutorService介绍和使用案例,感兴趣的朋友一起看看吧

ScheduledExecutorService 是 Java 并发包 java.util.concurrent 中的一个接口,它提供了一种机制,允许我们安排一个任务在给定的延迟后运行,或者定期地执行。

主要特点

  • 单次调度:可以安排任务在一定的延迟后执行一次。
  • 周期性调度:可以安排任务按照一定的周期重复执行。
  • 线程池ScheduledExecutorService 实现了 ExecutorService 接口,因此它拥有线程池的特性,可以复用线程,提高效率。
  • 灵活的调度策略:可以灵活地控制任务的执行时间。

使用案例

1. 单次调度

import java.util.concurrent.*;
public class SingleScheduleExample {
    public static void main(String[] args) {
        ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
        scheduler.schedule(() -> {
            System.out.println("任务执行了");
        }, 5, TimeUnit.SECONDS); // 5秒后执行
        scheduler.shutdown();
    }
}

2. 周期性调度

import java.util.concurrent.*;
public class PeriodicScheduleExample {
    public static void main(String[] args) {
        ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
        Runnable task = () -> {
            System.out.println("周期性任务执行了");
        };
        scheduler.scheduleAtFixedRate(task, 1, 3, TimeUnit.SECONDS); // 初始延迟1秒,之后每3秒执行一次
        // 如果需要在一定次数后停止
        scheduler.schedule(() -> scheduler.shutdown(), 10, TimeUnit.SECONDS);
    }
}

3. 固定延迟调度

import java.util.concurrent.*;
public class FixedDelayScheduleExample {
    public static void main(String[] args) {
        ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
        Runnable task = () -> {
            System.out.println("固定延迟任务执行了");
        };
        scheduler.scheduleWithFixedDelay(task, 1, 3, TimeUnit.SECONDS); // 初始延迟1秒,之后每次执行完任务后等待3秒再执行下一次
        // 如果需要在一定次数后停止
        scheduler.schedule(() -> scheduler.shutdown(), 10, TimeUnit.SECONDS);
    }
}

注意事项

  • 资源管理:使用 ScheduledExecutorService 时,需要正确管理资源,比如在不再需要时调用 shutdown()shutdownNow() 方法来关闭线程池。
  • 异常处理:任务中抛出的异常不会影响其他任务的执行,但是如果不处理,可能会导致任务终止。
  • 线程安全:提交给 ScheduledExecutorService 的任务应该是线程安全的,或者在任务内部正确处理同步。

ScheduledExecutorService 是一个非常强大的工具,可以帮助我们处理需要定时或周期性执行的任务,而且它还提供了线程池的优化,使得资源利用更加高效。

到此这篇关于java中的ScheduledExecutorService介绍和使用案例的文章就介绍到这了,更多相关java ScheduledExecutorService使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java面向对象之继承的概念详解

    Java面向对象之继承的概念详解

    这篇文章主要介绍了Java面向对象之继承的概念详解,Java是一种面向对象的编程语言,继承是实现面向对象编程的基础之一。通过继承,我们可以使代码更具可读性、可重用性和可维护性,从而提高程序的效率和可靠性,需要的朋友可以参考下
    2023-04-04
  • Java System类用法实战案例

    Java System类用法实战案例

    这篇文章主要介绍了Java System类用法,结合具体实例形式分析了java使用System类获取系统环境变量信息相关操作技巧,需要的朋友可以参考下
    2019-07-07
  • Java 中 Class Path 和 Package的使用详解

    Java 中 Class Path 和 Package的使用详解

    这篇文章主要介绍了Java 中 Class Path和Package的使用详解,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-08-08
  • Java整合腾讯云短信发送实例代码

    Java整合腾讯云短信发送实例代码

    大家好,本篇文章主要讲的是Java整合腾讯云短信发送实例代码,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • SpringBoot自动初始化数据库的方法分享

    SpringBoot自动初始化数据库的方法分享

    我们在项目中应该经常遇到过初始化数据的场景,特别是项目部署或者交付的时候,那么有什么方式可以在项目启动的时候自动初始化数据库呢,下面小编就来和大家分享几个方法吧
    2023-08-08
  • 剑指Offer之Java算法习题精讲数组与字符和等差数列

    剑指Offer之Java算法习题精讲数组与字符和等差数列

    跟着思路走,之后从简单题入手,反复去看,做过之后可能会忘记,之后再做一次,记不住就反复做,反复寻求思路和规律,慢慢积累就会发现质的变化
    2022-03-03
  • Springboot访问html页面的教程详解

    Springboot访问html页面的教程详解

    这篇文章主要介绍了Springboot访问html页面的教程,本文图文并茂给大家介绍的非常详细,需要的朋友可以参考下
    2018-03-03
  • rocketmq的AclClientRPCHook权限控制使用技巧示例详解

    rocketmq的AclClientRPCHook权限控制使用技巧示例详解

    这篇文章主要为大家介绍了rocketmq的AclClientRPCHook使用技巧示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • 详解Spring数据缓存注解@Cacheable、@CachePut、@CacheEvict

    详解Spring数据缓存注解@Cacheable、@CachePut、@CacheEvict

    这篇文章主要介绍了详解Spring数据缓存注解@Cacheable、CachePut、@CacheEvict,当以一组参数第一次调用某个方法时,返回值会被保存在缓存中,如果这个方法再次以相同的参数进行调用时,这个返回值会从缓存中查询获取,需要的朋友可以参考下
    2023-07-07
  • IDEA配置Tomcat创建web项目的详细步骤

    IDEA配置Tomcat创建web项目的详细步骤

    Tomcat是一个Java Web应用服务器,实现了多个Java EE规范(JSP、Java Servlet等),这篇文章主要给大家介绍了关于IDEA配置Tomcat创建web项目的详细步骤,需要的朋友可以参考下
    2023-12-12

最新评论