在用于实现...的类库方面,有什么好方法。
我希望java程序有一个时间列表[上午8点47分,上午8点49分,下午9点..],每次到达时,运行一些代码(启动单独的JAR)。我可以有一个去,但想要用于计时器的最佳类中的一些指导..也许有些是阻塞/非阻塞。
感谢。
答案 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