使用ScheduledThreadPoolExecutor定时线程池执行任务,只执行一次

开发场景:

例如:使用java ScheduledThreadPoolExecutor定时线程池执行任务,只执行一次


java代码

@Test
    public void test2() {
        ScheduledThreadPoolExecutor scheduledThreadPoolExecutor = new ScheduledThreadPoolExecutor(1);
        //指定时间执行一次
        LocalDateTime date = LocalDateTime.of(2022, 5, 30, 17, 55, 2);
        scheduledThreadPoolExecutor.schedule(
                () -> System.out.println("开始执行时间========:" + (new Date())),
                //加1是因为执行时间会比你指定时间提前1秒
                LocalDateTime.now().until(date, ChronoUnit.SECONDS) + 1,
                //指定单位秒
                TimeUnit.SECONDS);
		//异步取消任务执行,如果中途需要取消执行
        new Thread(() -> {
            try {
                Thread.sleep(20000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("取消执行========:" + (new Date()));
            future.cancel(true);
        }).start();
        try {
            //等待异步定时线程完成,自己手动停止
            Thread.sleep(600000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
ScheduledThreadPoolExecutorJava中的一个线程池实现,它可以用于定时执行任务。它继承自ThreadPoolExecutor,并实现了ScheduledExecutorService接口,提供了一些用于定时执行任务的方法。 ScheduledThreadPoolExecutor可以通过以下步骤来定时执行任务: 1. 创建ScheduledThreadPoolExecutor对象: ```java ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(corePoolSize); ``` 这里的corePoolSize是线程池的核心线程数,表示同时执行任务的最大线程数。 2. 调用schedule方法来定时执行任务: ```java executor.schedule(task, delay, unit); ``` 这里的task是要执行任务,delay是延迟时间,unit是延迟时间的单位。任务将在延迟时间之后执行一次。 3. 调用scheduleAtFixedRate方法来定时以固定的频率执行任务: ```java executor.scheduleAtFixedRate(task, initialDelay, period, unit); ``` 这里的initialDelay是初始延迟时间,period是任务执行的间隔时间,unit是时间单位。任务将在初始延迟时间之后开始执行,并且每隔固定的间隔时间重复执行。 4. 调用scheduleWithFixedDelay方法来定时以固定的延迟执行任务: ```java executor.scheduleWithFixedDelay(task, initialDelay, delay, unit); ``` 这里的initialDelay是初始延迟时间,delay是每次任务执行完成后的延迟时间,unit是时间单位。任务将在初始延迟时间之后开始执行,并且每次任务执行完成后会等待固定的延迟时间再执行一次。 需要注意的是,ScheduledThreadPoolExecutor会根据需要创建新的线程来执行任务,但不会超过核心线程数。如果所有的核心线程都在执行任务,而且任务队列已满,那么新的任务将会被拒绝执行
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

123小小先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值