【问题标题】:How do I execute a method at a particular time in java?如何在java中的特定时间执行方法?
【发布时间】:2014-08-06 02:29:27
【问题描述】:

有没有什么方法可以用java编写程序,以便它的主方法调度(或以10-15分钟的间隔)另一个方法以特定的时间间隔执行它?

【问题讨论】:

标签: java methods cron jobs


【解决方案1】:

您可以为此使用作业调度程序。即
Quartz Job Scheduler

参考这个Quartz API

或者 您可以使用 ScheduledExecutorService Java 接口

参考这个Documentation

【讨论】:

    【解决方案2】:

    我认为您正在寻找 Time 课程。

    Timer Class API 你可以像这样使用这个类:

    您希望每 600 毫秒执行一次方法。你写:

    ActionListener taskPerformer = new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent evt) {  
                    //Do your stuff
                    }
                };
    
    Timer t = new Timer(600, taskPerfomer);
    t.start;
    

    还有更多选择。此示例将执行一次,但可以间隔执行。 希望对你有帮助。

    【讨论】:

    • 此方案只执行该方法一次。如果你想以特定的时间间隔执行它,你必须使用调度程序。
    【解决方案3】:

    使用调度线程池执行器: 安排您的工作线程每 10 秒执行一次 scheduleThreadPool.schedule(worker, 10, TimeUnit.SECONDS);

    1) 类 WorkerThread .java

    public class WorkerThread implements Runnable{
    
    private String command;
    
        public WorkerThread(String s){
            this.command=s;
        }
    
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName()+" Start. Time = "+new Date());
            processCommand();
            System.out.println(Thread.currentThread().getName()+" End. Time = "+new Date());
        }
    
        private void processCommand() {
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    
        @Override
        public String toString(){
            return this.command;
        }
    }
    

    2) 类 ScheduledThreadPool .java

    import java.util.Date;
    import java.util.concurrent.Executors;
    import java.util.concurrent.ScheduledExecutorService;
    import java.util.concurrent.TimeUnit;
    
    
    public class ScheduledThreadPool {
    
        public static void main(String[] args) throws InterruptedException {
            ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
    
    
            //schedule to run after sometime
            System.out.println("Current Time = "+new Date());
            for(int i=0; i<3; i++){
                Thread.sleep(1000);
                WorkerThread worker = new WorkerThread("do heavy processing");
                scheduledThreadPool.schedule(worker, 10, TimeUnit.SECONDS);
            }
    
            //add some delay to let some threads spawn by scheduler
            Thread.sleep(30000);
    
            scheduledThreadPool.shutdown();
            while(!scheduledThreadPool.isTerminated()){
                //wait for all tasks to finish
            }
            System.out.println("Finished all threads");
        }
    
    }
    

    【讨论】:

      【解决方案4】:

      如果你的任务不是那么大,你可以使用Thread.sleep()方法(示例10次迭代,延迟10分钟):

      public static void main(String[] args) throws InterruptedException {
         methodOne();
      
         for (int i = 0; i < 10; i++) {
           Thread.sleep(600000);
           methodTwo();
         }
      }
      

      【讨论】:

        猜你喜欢
        • 2012-10-28
        • 1970-01-01
        • 1970-01-01
        • 2020-08-08
        • 1970-01-01
        • 2022-01-16
        • 2013-11-05
        • 1970-01-01
        相关资源
        最近更新 更多