写一个监听类,想要实现类似的功能,求思路
你再看一下标题,再看看我说的,
1秒循环一次 不是休息1秒 就算1秒循环1次的。timer 也一样。
循环方法要是1秒钟执行不完,怎么办?
也就是说,循环方法 执行一次就需要2秒,你却每隔1秒 又要循环一次? 可以用多线程的方法。在一个线程里面实现一个循环 设置这个县城Thread.sleep(1000)来实现。但是多线程里面的线程机制调用的确定性 没深入研究。还有个定时器类 Timer 可以实现这个类是显示的
试了一下,用Timer或ScheduledThreadPoolExecutor都不行,都是等上一次任务执行完之后再执行下一个任务 , 但是用Quartz 是可以的。
需要 quartz-all-2.1.6.jar 包
package com.zf.qzuarz;
import java.util.concurrent.TimeUnit;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class HelloJob implements Job {
public void execute(JobExecutionContext context)
throws JobExecutionException {
try {
System.out.println("execute start ....");
TimeUnit.SECONDS.sleep(3); //睡眠3s
System.out.println("execute end ....");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
package com.zf.qzuarz;
import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
public class SimpleExample {
public void run() throws Exception {
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler();
JobDetail job = JobBuilder.newJob(HelloJob.class)
.withIdentity("job1", "group1")
.build();
CronTrigger trigger = TriggerBuilder.newTrigger()
.withIdentity("trigger1", "group1")
.withSchedule(CronScheduleBuilder.cronSchedule("0/1 * * * * ?"))
.build();
sched.scheduleJob(job, trigger);
sched.start();
}
public static void main(String[] args) throws Exception {
SimpleExample example = new SimpleExample();
example.run();
}
}
如果要做成每次都定点循环的话,可以用timer每个一秒跑一次;
如果做成当此次循环结束1秒后再循环的话,就直接在for里面,执行完操作后,加个sleep(1000)就可以了。