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

nav*_*978 2 java timertask scheduledexecutorservice

我有一个代码必须在未来的某个日期时间执行,假设我有一个未来的日期,并且我想在未来的该日期 +1 分钟内执行一段代码,但仅限一次。我知道我要使用 java Timer 和 TimerTask 来执行此操作。例如,执行以下操作:

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);
    }

}
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种使用ScheduledExecutorService进行相同操作的优雅方法,以便拥有一个特定的池,因为该池将用于多个调用。有人可以帮助我吗?

azr*_*zro 6


如果你想设置一个持续时间:

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);
Run Code Online (Sandbox Code Playgroud)

如果你想使用LocalDateTime

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);
Run Code Online (Sandbox Code Playgroud)