我想每15分钟运行一次方法,例如0:15,0:30,0:45,1:00,1:15,1:30等。
请告诉我我的位置 错误的下面的代码不能正常工作?
public class MainClass{
//Set Calendar
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.MINUTE , 15);
private Timer timer;
switch(flag) { //here flag 1 ,2 etc
case 1: //Initial Server
timer.schedule(new MyTask(),0);
break;
case:2
timer.schedule(new MyTask(),calendar.getTime(),Long.valueOf(1)*1000*900);
break;
}
class MyTask extends TimerTask{
public void run() {
//Method Stuff here
}
}
}
答案 0 :(得分:3)
继续澄清任务需要在一小时的特定时间(0,15,30,45)完全运行,我真的建议您查看一个正确的作业调度库,例如{{3 }}
另一方面,如果你真的想坚持使用Timer,你的问题就是为你的计时器找到正确的第一次运行时间,然后从那时起每15分钟运行一次。
你可以按照Ben的建议使用Joda,但这段代码可能适合你:
import java.util.Calendar;
import java.util.Timer;
import java.util.TimerTask;
public class TimerExample {
private static Timer timer = new Timer();
private static Calendar getFirstTime() {
Calendar cal = Calendar.getInstance();
int currentMinute = cal.get(Calendar.MINUTE);
if (currentMinute < 45) {
cal.set(Calendar.MINUTE, 45);
}
if (currentMinute < 30) {
cal.set(Calendar.MINUTE, 30);
}
if (currentMinute < 15) {
cal.set(Calendar.MINUTE, 15);
}
if (currentMinute >= 45) {
cal.set(Calendar.HOUR_OF_DAY, cal.get(Calendar.HOUR_OF_DAY) + 1);
cal.set(Calendar.MINUTE, 0);
}
cal.set(Calendar.SECOND, 0);
return cal;
}
public static void main(String... args) {
Calendar firstTaskTime = getFirstTime();
System.out.println("Task will start at: " + firstTaskTime.getTime());
timer.schedule(new MyTask(), firstTaskTime.getTime(), 1000 * 60 * 15);
}
}
class MyTask extends TimerTask {
public void run() {
System.out.println("running task");
}
}
答案 1 :(得分:2)
这是一个工作示例
import java.util.Calendar;
import java.util.Timer;
import java.util.TimerTask;
public class MainClass {
private static Timer timer = new Timer();
public static void main(String...args){
timer.schedule (new MyTask(),0,1000*60*15);
}
}
class MyTask extends TimerTask {
public void run() {
System.out.println("hello");
}
}
干杯,
答案 2 :(得分:2)
In [2]: states = ["New York", "California", "Nebraska", "Idaho"]
In [3]: postal_addr = "1234 1st E St San Jose California 95112"
In [4]: ''.join(state for state in states if state in postal_addr)
Out[4]: 'California'
,请参阅javadoc:
Java 5.0引入了java.util.concurrent包和其中一个 其中的并发实用程序是ScheduledThreadPoolExecutor 是一个线程池,用于以给定的速率重复执行任务或 延迟。它实际上是一种更通用的替代品 Timer / TimerTask组合,因为它允许多个服务线程, 接受各种时间单位,不需要子类化TimerTask (只需实现Runnable)。配置ScheduledThreadPoolExecutor 使用一个线程使其等同于Timer。
相反,请使用 ScheduledThreadPoolExecutor :
Timer