首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用ScheduledExecutorService仅在特定日期时间运行代码一次

使用ScheduledExecutorService仅在特定日期时间运行代码一次
EN

Stack Overflow用户
提问于 2018-06-17 23:46:23
回答 2查看 2.9K关注 0票数 0

我有一段代码,必须在未来的某个日期执行,假设我有一个未来的日期,我想在该日期+1分钟后执行一段代码,,但只执行一次。我知道我要用一个java Timer和TimerTask .For示例来做这样的事情:

代码语言:javascript
复制
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class Main {

    public static void main(String[] args) {

        Calendar myDate = Calendar.getInstance();
        myDate.add(Calendar.MINUTE, 1);
        Date afterOneMinute = myDate.getTime();
        System.out.println("Scheduled at:" + afterOneMinute);
        Timer timer = new Timer();

        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                System.out.println("Executed at:" + (new Date()));

            }
        }, afterOneMinute);
    }

}

我正在寻找一种优雅的方式来使用ScheduledExecutorService,来达到相同的目的,以便有一个特定的池,因为这个池将用于多个调用。有人能帮帮我吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-17 23:52:08

您可以使用ScheduledExecutorService.schedule(Runnable command, long delay, TimeUnit unit)

代码语言:javascript
复制
long delay = afterOneMinute.getTime() - System.currentTimeMillis();
ScheduledExecutorService executorService = ...;
executorService.schedule(runnable, delay, TimeUnit.MILLISECONDS);
票数 1
EN

Stack Overflow用户

发布于 2018-06-17 23:54:34

您可以从Executors获取ScheduledExecutorService,获取SingleThread版本或MultipleThread Executors.newSingleThreadScheduledExecutor

如果要设置持续时间,请执行以下操作:

代码语言:javascript
复制
ScheduledExecutorService exe = Executors.newSingleThreadScheduledExecutor();
// or Executors.newScheduledThreadPool(2); if you have multiple tasks
exe.schedule(() -> System.out.println("Executed at:" + (new Date())), 1, TimeUnit.MINUTES);

如果您想要使用LocalDateTime

代码语言:javascript
复制
ScheduledExecutorService exe = Executors.newSingleThreadScheduledExecutor();
// or Executors.newScheduledThreadPool(2); if you have multiple tasks
LocalDateTime date = LocalDateTime.of(2018, 6, 17, 18, 30, 0);
exe.schedule(
       () -> System.out.println("Executed at:" + (new Date())),
       LocalDateTime.now().until(date, ChronoUnit.MINUTES),
       TimeUnit.MINUTES);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50898177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档