【发布时间】:2014-08-06 02:29:27
【问题描述】:
有没有什么方法可以用java编写程序,以便它的主方法调度(或以10-15分钟的间隔)另一个方法以特定的时间间隔执行它?
【问题讨论】:
-
你可以使用调度器quartz-scheduler.org
-
您可以使用 cron 作业。
有没有什么方法可以用java编写程序,以便它的主方法调度(或以10-15分钟的间隔)另一个方法以特定的时间间隔执行它?
【问题讨论】:
您可以为此使用作业调度程序。即
Quartz Job Scheduler。
参考这个Quartz API
或者 您可以使用 ScheduledExecutorService Java 接口
参考这个Documentation
【讨论】:
我认为您正在寻找 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;
还有更多选择。此示例将执行一次,但可以间隔执行。 希望对你有帮助。
【讨论】:
使用调度线程池执行器: 安排您的工作线程每 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");
}
}
【讨论】:
如果你的任务不是那么大,你可以使用Thread.sleep()方法(示例10次迭代,延迟10分钟):
public static void main(String[] args) throws InterruptedException {
methodOne();
for (int i = 0; i < 10; i++) {
Thread.sleep(600000);
methodTwo();
}
}
【讨论】: