首页 > 其他分享 >ScheduledThreadPoolExecutor

ScheduledThreadPoolExecutor

时间:2024-09-20 16:45:49浏览次数:7  
标签:ScheduledThreadPoolExecutor System 任务 线程 executor 执行

总结

  继承自 ThreadPoolExecutor 实现了 ScheduledExecutorService 接口

  提供了基于线程池的定时任务调度功能,允许你安排任务在未来某个时间点执行一次,或者周期性地重复执行。  

特性

  • 定时任务:可以安排任务在指定延迟后执行
  • 周期性任务:可以安排任务按照固定的时间间隔重复执行
  • 线程池管理:利用线程池来管理和复用线程,减少线程创建和销毁的开销。
  • 灵活的任务取消:可以通过返回的 Future 对象取消尚未开始的任务。

方法

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

    • 安排一个一次性任务,在给定的延迟之后执行
    • 返回一个 ScheduledFuture<?> 对象,可以用它来取消任务或检查任务的状态
  • schedule(Callable<V> callable, long delay, TimeUnit unit):

    • 安排一个带结果的一次性任务,在给定的延迟之后执行
    • 返回一个 ScheduledFuture<V> 对象,可以用它来获取任务的结果或取消任务
  • scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit):

    • 按照固定的速率周期性地执行任务。
    • 第一次执行会在初始延迟之后进行,然后每隔指定的时间间隔执行一次,无论上次任务是否完成。
  • scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit):

    • 按照固定的延迟周期性地执行任务。
    • 第一次执行会在初始延迟之后进行,然后在每次任务完成后等待指定的延迟时间再执行下一次任务。

示例  

一次性任务:

public static void main(String[] args) {
        // 创建一个具有3个核心线程的ScheduledThreadPoolExecutor
        ScheduledExecutorService executor = new ScheduledThreadPoolExecutor(3);

        // 在5秒后执行一个一次性任务
        executor.schedule(() -> {
            System.out.println("Task executed at: " + System.currentTimeMillis());
        }, 5, TimeUnit.SECONDS);

        // 关闭线程池
        executor.shutdown();
    }


固定速率执行的任务:

public static void main(String[] args) {
        // 创建一个具有3个核心线程的ScheduledThreadPoolExecutor
        ScheduledExecutorService executor = new ScheduledThreadPoolExecutor(3);

        // 每隔2秒执行一次任务,初始延迟为1秒
        executor.scheduleAtFixedRate(() -> {
            System.out.println("Task executed at: " + System.currentTimeMillis());
        }, 1, 2, TimeUnit.SECONDS);

        // 运行一段时间后关闭线程池
        try {
            Thread.sleep(10000); // 让主线程休眠10秒
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        executor.shutdown();
    }


固定延迟执行的任务:

public static void main(String[] args) {
        // 创建一个具有3个核心线程的ScheduledThreadPoolExecutor
        ScheduledExecutorService executor = new ScheduledThreadPoolExecutor(3);

        // 每次任务执行完毕后等待2秒再执行下一次任务,初始延迟为1秒
        executor.scheduleWithFixedDelay(() -> {
            System.out.println("Task started at: " + System.currentTimeMillis());
            try {
                Thread.sleep(3000); // 模拟耗时操作
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("Task finished at: " + System.currentTimeMillis());
        }, 1, 2, TimeUnit.SECONDS);

        // 运行一段时间后关闭线程池
        try {
            Thread.sleep(15000); // 让主线程休眠15秒
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        executor.shutdown();
    }

  

 

标签:ScheduledThreadPoolExecutor,System,任务,线程,executor,执行
From: https://www.cnblogs.com/anpeiyong/p/18422799

相关文章

  • J.U.C Review - 计划任务ScheduledThreadPoolExecutor源码分析
    文章目录TimeVSScheduledThreadPoolExecutor小DemoScheduledThreadPoolExecutor类结构ScheduledThreadPoolExecutor主要方法介绍scheduleDelayed接口ScheduledFuture接口RunnableScheduledFuture接口ScheduledFutureTask类scheduleAtFixedRatescheduleWithFixedDelayd......
  • ScheduledThreadPoolExecutor
    定时任务ScheduledThreadPoolExecutor类有两个用途:指定时间延迟后执行任务;周期性重复执行任务。JDK1.5之前,主要使用Timer类来完成定时任务,但是Timer有以下缺陷:Timer是单线程模式;如果在执行任务期间某个TimerTask耗时较久,就会影响其它任务的调度;Timer的任务调度是基于......
  • ScheduledThreadPoolExecutor 定时任务
    目录ScheduledThreadPoolExecutor一、概述二、常用方法1、schedule方法2、scheduleAtFixedRate方法3.scheduleWithFixedDelay方法三、ScheduledExecutorService的创建方式ScheduledThreadPoolExecutor一、概述java中ScheduledExecutorService接口是基于线程池设计的定时任......
  • Netty源码学习9——从Timer到ScheduledThreadPoolExecutor到HashedWheelTimer
    系列文章目录和关于我一丶前言之前在学习netty源码的时候,经常看nettyhash时间轮(HashedWheelTimer)的出现,时间轮作为一种定时调度机制,在jdk中还存在Timer和ScheduledThreadPoolExecutor。那么为什么netty要重复造轮子昵,HashedWheelTimer又是如何实现的,解决了什么问题?这一篇将从T......
  • ScheduledThreadPoolExecutor.setExecuteExistingDelayedTasksAfterShutdownPolicy(bo
    MethodSummary voidexecute(Runnable          Executecommandwithzerorequireddelay. booleangetContinueExistingPeriodicTasksAfterShutdownPolicy()          Getthepolicyonwhethertocontinueexecutingexistingperiodictaskseven......
  • ScheduledThreadPoolExecutor模仿学习
     publicinterfaceCBlockingQueue<E>{booleanadd(Ee);Etake();} importjava.util.concurrent.Delayed;importjava.util.concurrent.FutureTask;importjava.util.concurrent.RunnableScheduledFuture;importjava.util.concurrent.TimeUnit;......
  • ScheduledThreadPoolExecutor的基本使用和源码解读
    1基本使用ScheduledThreadPoolExecutor是一种特殊的线程池,它可以执行延迟任务和定时任务。首先,通常会在全局范围内创建线程池对象,可以是静态变量,或者Spring单例对象:Thr......
  • 守护线程ScheduledThreadPoolExecutor中两个方法的区别demo
    packagecom.pzistart.msgdemoimpl.renlock;importjdk.nashorn.internal.ir.Block;importjavax.annotation.security.RunAs;importjavax.sound.sampled.FloatContr......
  • jdk调度任务线程池ScheduledThreadPoolExecutor工作原理解析
    jdk调度任务线程池ScheduledThreadPoolExecutor工作原理解析在日常开发中存在着调度延时任务、定时任务的需求,而jdk中提供了两种基于内存的任务调度工具,即相对早期的java.......
  • 深度解析9种ScheduledThreadPoolExecutor的构造方法
    摘要:今天我们就来一起手撕ScheduledThreadPoolExecutor类的源代码。本文分享自华为云社区《​​深度解析ScheduledThreadPoolExecutor类的源代码​​》,作者:冰河。在之前的......