java线程池执行任务(一次任务、固定间隔时间任务等)

简介: java线程池执行任务(一次任务、固定间隔时间任务等)

在 Java 中,可以使用线程池来执行定时任务。线程池是一种管理和复用线程的机制,它可以提高线程的利用率,减少线程创建和销毁的开销,并且可以控制并发线程的数量。

Java 中的定时任务可以使用 ScheduledThreadPoolExecutor 类来实现,它是 ThreadPoolExecutor 类的子类,专门用于执行定时任务。通过 ScheduledThreadPoolExecutor,可以按照指定的延迟时间或固定的时间间隔来执行任务。

下面是一个使用线程池执行定时任务的示例代码:

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class ScheduledThreadPoolExample {
    public static void main(String[] args) throws InterruptedException {
        // 创建一个大小为 5 的线程池
        ScheduledExecutorService executor = Executors.newScheduledThreadPool(5);

        // 延迟 1 秒后执行任务
        executor.schedule(new Task(), 1, TimeUnit.SECONDS);

        // 延迟 2 秒后开始执行任务,然后每隔 3 秒重复执行任务
        executor.scheduleAtFixedRate(new Task2(), 2, 3, TimeUnit.SECONDS);

        // 延迟 2 秒后开始执行任务,然后在上一次任务执行完成后,等待 3 秒再执行下一次任务
        executor.scheduleWithFixedDelay(new Task3(), 2, 3, TimeUnit.SECONDS);
        Thread.sleep(100*1000);
        // 关闭线程池
        executor.shutdown();
    }

    static class Task implements Runnable {
        @Override
        public void run() {
            System.out.println("延迟一秒执行 " + System.currentTimeMillis());
        }
    }
    static class Task2 implements Runnable {
        @Override
        public void run() {
            System.out.println("延迟 2 秒后开始执行任务,然后每隔 3 秒重复执行任务 " + System.currentTimeMillis());
        }
    }
    static class Task3 implements Runnable {
        @Override
        public void run() {
            System.out.println("延迟 2 秒后开始执行任务,然后在上一次任务执行完成后,等待 3 秒再执行下一次任务 " + System.currentTimeMillis());
        }
    }
}

首先,我们创建了一个大小为 5 的线程池 executor,它使用 Executors.newScheduledThreadPool() 方法来创建。然后,我们使用 schedule() 方法调度了一个延迟 1 秒后执行的任务,该任务由 Task 类的实例执行。接着,我们使用 scheduleAtFixedRate() 方法调度了一个延迟 2 秒后开始执行的任务,并且每隔 3 秒重复执行一次,该任务由 Task2 类的实例执行。最后,我们使用 scheduleWithFixedDelay() 方法调度了一个延迟 2 秒后开始执行的任务,并且在上一次任务执行完成后,等待 3 秒再执行下一次任务,该任务由 Task3 类的实例执行。


在每个任务的 run() 方法中,我们输出了相应任务的执行时间戳。


为了保证定时任务的执行时间足够长,我们使用 Thread.sleep(100*1000) 方法让主线程休眠 100 秒。


最后,我们调用 executor.shutdown() 方法关闭线程池。


执行上述代码后,将会输出类似以下结果:

延迟一秒执行 1634736445744
延迟 2 秒后开始执行任务,然后每隔 3 秒重复执行任务 1634736448747
延迟 2 秒后开始执行任务,然后在上一次任务执行完成后,等待 3 秒再执行下一次任务 1634736451747

通过以上代码,我们实现了使用线程池执行定时任务,并且按照指定的延迟时间或固定的时间间隔来执行任务。

目录
相关文章
|
10天前
|
监控 Java 调度
Java线程池ThreadPoolExecutor初略探索
Java线程池ThreadPoolExecutor初略探索
|
3天前
|
缓存 并行计算 Java
重温JAVA线程池精髓:Executor、ExecutorService及Executors的源码剖析与应用指南
重温JAVA线程池精髓:Executor、ExecutorService及Executors的源码剖析与应用指南
|
2天前
|
Java
解析Java线程池:参数详解与执行流程
解析Java线程池:参数详解与执行流程
6 1
|
3天前
|
监控 Java 调度
Java并发编程:深入理解线程池
【6月更文挑战第26天】在Java并发编程的世界中,线程池是提升应用性能、优化资源管理的关键组件。本文将深入探讨线程池的内部机制,从核心概念到实际应用,揭示如何有效利用线程池来处理并发任务,同时避免常见的陷阱和错误实践。通过实例分析,我们将了解线程池配置的策略和对性能的影响,以及如何监控和维护线程池的健康状况。
7 1
|
3天前
|
存储 测试技术
【工作实践(多线程)】十个线程任务生成720w测试数据对系统进行性能测试
【工作实践(多线程)】十个线程任务生成720w测试数据对系统进行性能测试
10 0
【工作实践(多线程)】十个线程任务生成720w测试数据对系统进行性能测试
|
10天前
|
Java 应用服务中间件 Apache
安装和配置Apache Tomcat是部署Java Web应用程序的常见任务
安装和配置Apache Tomcat是部署Java Web应用程序的常见任务
39 7
|
6天前
|
Java
java同一个任务使用for循环与Stream比较
java同一个任务使用for循环与Stream比较
10 1
|
12天前
|
Java 程序员
Java多线程编程是指在一个进程中创建并运行多个线程,每个线程执行不同的任务,并行地工作,以达到提高效率的目的
【6月更文挑战第18天】Java多线程提升效率,通过synchronized关键字、Lock接口和原子变量实现同步互斥。synchronized控制共享资源访问,基于对象内置锁。Lock接口提供更灵活的锁管理,需手动解锁。原子变量类(如AtomicInteger)支持无锁的原子操作,减少性能影响。
21 3
|
1天前
|
监控 Java UED
Java并发编程:深入理解线程池的设计与应用
本文旨在通过数据导向和科学严谨的方式,深入探讨Java并发编程中的关键组件——线程池。文章首先概述了线程池的基本概念与重要性,随后详细解读了线程池的核心参数及其对性能的影响,并通过实验数据支持分析结果。此外,文中还将介绍如何根据不同的应用场景选择或设计合适的线程池,以及如何避免常见的并发问题。最后,通过案例研究,展示线程池在实际应用中的优化效果,为开发人员提供实践指导。
7 0
|
2天前
|
存储 缓存 Java
Java并发编程之线程池的使用
Java并发编程之线程池的使用