当前位置: 首页 > news >正文

Java进阶——原生定时器

        本文将详细介绍Java原生定时器的使用,包括 Timer 类和 ScheduledExecutorService 接口。

本文目录

    • 1. Timer类
      • 1.1 简介
      • 1.2 基本使用
      • 1.3 Timer类的局限性
    • 2. ScheduledExecutorService接口
      • 2.1 简介
      • 2.2 基本使用
      • 2.3 ScheduledExecutorService的优势

1. Timer类

1.1 简介

Timer 是 Java 早期提供的一个简单定时器类,允许你安排一个任务在未来的某个时间执行,或者以固定的时间间隔重复执行。Timer 内部使用一个后台线程来执行定时任务。

1.2 基本使用

使用 Timer 类实现定时任务:

import java.util.Timer;
import java.util.TimerTask;

public class TimerTest {
    public static void main(String[] args) {
      
        Timer timer = new Timer();
        TimerTask task = new TimerTask() {
            @Override
            public void run() {
                System.out.println("定时任务执行,当前时间:" + System.currentTimeMillis());
            }
        };

        // 安排任务在2秒后开始执行,之后每隔3秒执行一次
        timer.schedule(task, 2000, 3000);
    }
}
  • Timer 类的实例 timer 用于管理定时任务。
  • TimerTask 是一个抽象类,需要继承并实现 run 方法,在 run 方法中定义具体的任务逻辑。

1.3 Timer类的局限性

  • 单线程执行Timer 内部使用单线程执行任务,如果一个任务执行时间过长,会影响其他任务的执行。
  • 异常处理:如果一个任务抛出异常,Timer 会终止所有任务的执行。



2. ScheduledExecutorService接口

2.1 简介

ScheduledExecutorService 是Java 5引入的一个更强大的定时任务执行器,是 ExecutorService 的子接口。ScheduledExecutorService 使用线程池来执行定时任务,避免了 Timer 类的单线程问题,并且对异常的处理更加健壮。

2.2 基本使用

使用 ScheduledExecutorService 实现定时任务:

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

public class ScheduledExecutorServiceTest {
    public static void main(String[] args) {
        ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);

        Runnable task = () -> {
            System.out.println("定时任务执行,当前时间:" + System.currentTimeMillis());
        };

        // 安排任务在2秒后开始执行,之后每隔3秒执行一次
        executor.scheduleAtFixedRate(task, 2, 3, TimeUnit.SECONDS);
    }
}

2.3 ScheduledExecutorService的优势

  • 多线程执行ScheduledExecutorService 使用线程池执行任务,可以同时执行多个任务,提高了并发性能。
  • 异常处理:如果一个任务抛出异常,不会影响其他任务的执行。


← 上一篇 Java进阶——常用类及常用方法详解
记得点赞、关注、收藏哦!
下一篇 Java进阶——数组超详细整理 →

相关文章:

  • Python 爬虫(5)Beautiful Soup 4 实战
  • 数字隔离器选型与设计
  • 通过安当TDE透明加密实现ClickHouse数据库安全加密存储
  • 从失衡到平衡:手撕红黑树的插入旋转操作
  • 后端开发基础:语言选择与 RESTful API 设计
  • GET 和 POST 有什么区别
  • H3C交换机的配置 VLAN间通信及网关部署在三层交换机
  • vector算法练习
  • 关于OpenManu的技术实现与部署要求
  • QT对话框
  • 洛谷题单1-P5707 【深基2.例12】上学迟到-python-流程图重构
  • c++进阶之----哈希(桶)
  • 决策树原理详解
  • 3月30号
  • Windows10 下QT社区版的安装记录
  • 在 Vue 项目中快速集成 Vant 组件库
  • 磁盘冗余阵列
  • KMeans算法案例
  • 微服务架构中的精妙设计:服务注册/服务发现-Eureka
  • MySQL执行计划分析
  • 网站做404/全国网站排名
  • h5免费建站/微信朋友圈产品推广语
  • 网站建设模板/推广运营怎么做
  • 百捷网站建设/seo推广的方法
  • wordpress手机访问/搜狗关键词优化软件
  • css是在网站开发的应用/网站查询访问