Java计时器代码执行JAR

时间:2018-05-23 06:30:54

标签: java multithreading timer

在用于实现...的类库方面,有什么好方法。

我希望java程序有一个时间列表[上午8点47分,上午8点49分,下午9点..],每次到达时,运行一些代码(启动单独的JAR)。我可以有一个去,但想要用于计时器的最佳类中的一些指导..也许有些是阻塞/非阻塞。

感谢。

2 个答案:

答案 0 :(得分:1)

我们可以通过使用TimerTask类来实现这一点,该类在内部实现了可运行的接口。 声明一个arrayList并将所需的时间插入其中,并相应地调度方法调用。

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;


//The task which you want to execute
class MyTimeTask extends TimerTask
{
    public void run()
    {
        System.out.println("DO some task");
    }

public static void main(String[] args) throws ParseException {

    //the Date and time at which you want to execute
    DateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm a");
    Date date = dateFormatter.parse("2018-05-23 12:43 am");
    Date date1 = dateFormatter.parse("2018-05-23 12:43 pm");
    ArrayList<Date> d=new ArrayList<>();
    d.add(date);
    d.add(date1);
    //Now create the time and schedule it
    Timer timer = new Timer();
    //Use this if you want to execute it once
   for(Date dd:d){
       timer.schedule(new MyTimeTask(),dd);
    }

    //Use this if you want to execute it repeatedly
    //int period = 10000;//10secs
    //timer.schedule(new MyTimeTask(), date, period );
 }
}

答案 1 :(得分:1)

如果你想要持久定时器,并且有可能触发错过的定时器,你应该考虑使用Quartz库: http://www.quartz-scheduler.org

否则,您的操作系统已经支持您要执行的操作。在Windows中,您可以使用任务计划程序。在linux和Mac中,您可以使用CRON。

cron的例子:

# Run at exactly 8:47 am
47 8 * * * java -jar first_app.jar

# Run at exactly 9 pm
0 21 * * * java -jar second_app.jar

# Run every 15 minutes
*/15 * * * * java -jar third_app.jar