Run java function every hour

前端 未结 4 775
孤街浪徒
孤街浪徒 2020-12-19 09:02

I want to run a function every hour, to email users a hourly screenshot of their progress. I code set up to do so in a function called sendScreenshot()

How can I run

相关标签:
4条回答
  • 2020-12-19 09:45

    According to this article by Oracle, it's also possible to use the @Schedule annotation:

    @Schedule(hour = "*")
    public void doSomething() {
        System.out.println("hello world");
    }
    

    For example, seconds and minutes can have values 0-59, hours 0-23, months 1-12.

    Further options are also described there.

    0 讨论(0)
  • 2020-12-19 09:50

    Use a ScheduledExecutorService:

    ScheduledExecutorService ses = Executors.newSingleThreadScheduledExecutor();
    ses.scheduleAtFixedRate(new Runnable() {
        @Override
        public void run() {
            sendScreenShot();
        }
    }, 0, 1, TimeUnit.HOURS);
    

    Prefer using a ScheduledExecutorService over Timer: Java Timer vs ExecutorService?

    0 讨论(0)
  • 2020-12-19 09:53

    For this type of period execution, meaning every day or every hour, all you need is using a Timer like this :

    public static void main(String[] args) throws InterruptedException {
            Calendar today = Calendar.getInstance();
            today.set(Calendar.HOUR_OF_DAY, 7);
            today.set(Calendar.MINUTE, 45);
            today.set(Calendar.SECOND, 0);
    
            Timer timer = new Timer();
            TimerTask task = new TimerTask() {
                @Override
                public void run() {
                    System.out.println("I am the timer");
                }
            };
    //        timer.schedule(task, today.getTime(), TimeUnit.MILLISECONDS.convert(1, TimeUnit.DAYS)); // period: 1 day
            timer.schedule(task, today.getTime(), TimeUnit.MILLISECONDS.convert(5, TimeUnit.SECONDS)); // period: 5 seconds
    
        }
    

    this exemple will execute the timetask every 5 seconds from the current date and 7:45 am. Good Luck.

    0 讨论(0)
  • java's Timer works fine here.

    http://docs.oracle.com/javase/6/docs/api/java/util/Timer.html

    Timer t = new Timer();
    t.scheduleAtFixedRate(new TimerTask() {
        public void run() {
            // ...
        }
    }, delay, 1 * 3600 * 1000); // 1 hour between calls
    
    0 讨论(0)
提交回复
热议问题