大部分人在遇到需要使用定时任务的时候首先会想到Timer类,
在新的java.util.concurrent包中的ScheduledExecutorService可以替代这个Timer:
使用方法举例:
Java代码
ScheduledThreadPoolExecutor exec = new ScheduledThreadPoolExecutor(1);
exec.scheduleAtFixedRate(new Runnable() {
public void run() {
try{
throw new RuntimeException();
}catch (Exception e){
System.out.println("RuntimeException catched");
}
JDK 自带的定时器实现
// schedule(TimerTask task, long delay) 延迟 delay 毫秒 执行
// schedule(TimerTask task, Date time) 特定时间执行
public static void main(String[] args) {
for (int i = 0; i 10; ++i) {
new Timer("timer - " + i).schedule(new TimerTask() {
@Override
println(Thread.currentThread().getName() + " run ");
}, 1000);
//该类需要继承Job类,然后添加execute(JobExecutionContext context)方法,在
//这个方法中就是我们具体的任务执行的地方.
//由希望由调度程序执行的组件实现的接口
public void execute(JobExecutionContext context) throws JobExecutionException {
// TODO Auto-generated method stub
// 执行响应的任务.
System.out.println("HelloJob.execute,"+new Date());
public static void main(String[] args) throws Exception {
//SchedulerFactory 是一个接口,用于Scheduler的创建和管理
SchedulerFactory factory = new StdSchedulerFactory();
//从工厂里面拿到一个scheduler实例
//计划表(可能翻译的不太贴切),现在我们有了要做的内容,
//与调度程序交互的主要API
/*
* Scheduler的生命期,从SchedulerFactory创建它时开始,
到Scheduler调用shutdown()方法时结束;Scheduler被创建后,
可以增加、删除和列举Job和Trigger,以及执行其它与调度相关的操作
(如暂停Trigger).但是,Scheduler只有在调用start()方法后,
才会真正地触发trigger(即执行job)
*/
Scheduler scheduler = factory.getScheduler();
//具体任务.
//用于定义作业的实例
//JobBuilder - 用于定义/构建JobDetail实例,用于定义作业的实例.
JobDetail job = JobBuilder.newJob(MyJob.class).withIdentity("job1", "group1").build();
//Trigger(即触发器) - 定义执行给定作业的计划的组件
//TriggerBuilder - 用于定义/构建触发器实例
CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1")
.withSchedule(CronScheduleBuilder.cronSchedule("0/1? * * * * ?")).build();
scheduler.scheduleJob(job, trigger);
scheduler.start();
*? 开启对定时任务的支持
@EnableScheduling
public class Application {
SpringApplication.run(Application.class, args);
@Component
public class ScheduledTasks {
private Logger logger = LoggerFactory.getLogger(ScheduledTasks.class);
private? int? i=0;
public void testFixDelay() {
logger.info("执行方法"+i++);
这个是我在网上找的不知道是不是你要的:
java定时任务Timer 关于定时任务,似乎跟时间操作的联系并不是很大,但是前面既然提到了定时任务,索性今天这一节一起解决了.设置定时任务很简单,用Timer类就搞定了.第一段:延时执行首先,我们定义一个类,给它取个名字叫TimeTask,我们的定时任务,就在这个类的main函数里执行.代码如下:
package test;
import java.util.Timer;
public class TimeTaskTest {
public static void main(String[] args){ Timer timer = new Timer();
解释一下上面的代码.上面的代码实现了这样一个功能,当TimeTask程序启动以后,过一分钟后执行某项任务.很简单吧:先new一个Timer对象,然后调用它的schedule方法,这个方法有四个重载的方法,这里我们用其中一个,
public void schedule(TimerTask task,long delay)
首先,第一个参数第一个参数就是我们要执行的任务.这是一个TimerTask对象,确切点说是一个实现TimerTask的类的对象,因为TimerTask是个抽象类.上面的代码里 面,Task就是我们自己定义的实现了TimerTask的类,因为是在同一个包里面,所以没有显性的import进来.Task类的代码如下
import java.util.TimerTask;
public class Task extends TimerTask { public void run()
{
System.out.println("定时任务执行");
public void schedule(TimerTask task,Date time)
我是让它每10毫秒扫描一下.
Calendar ca=null;
Calendar ca1=null;
Timer timer=new Timer();
static Connection con=null;
public void chu(){
ca=Calendar.getInstance();
ca1=(Calendar)ca.clone();
public void Time(){
float s=ca1.get(Calendar.SECOND)-ca.get(Calendar.SECOND)+(ca1.get(Calendar.MILLISECOND)-ca.get(Calendar.MILLISECOND))/1000f;
if(con==null){
System.out.println("耗时"+String.valueOf(s)+"秒");
if(ca.after(ca1)){
System.out.println("取不到连接");
timer.cancel();
return ;
}else{
ca.add(Calendar.MILLISECOND, 10);
timer.schedule(
new TimerTask() {
System.out.println("时间在溜走....");
Time();
}, ca.getTime());
void getcon(){
Connection con=null;//获取Connection
chu();
import?java.io.IOException;
import?java.util.Timer;
public?class?TimerTest?{
public?static?void?main(String[]?args)?{
Timer?timer?=?new?Timer();
while?(true)?{//?这个是用来停止此任务的,否则就一直循环执行此任务了
try?{
int?ch?=?System.in.read();
if?(ch?-?'c'?==?0)?{
timer.cancel();//?使用这个方法退出任务
}?catch?(IOException?e)?{
//?TODO?Auto-generated?catch?block
e.printStackTrace();
static?class?MyTask?extends?java.util.TimerTask?{
public?void?run()?{
//?TODO?Auto-generated?method?stub
System.out.println("________");
这段代码基本能满足你需求了 你还有需求就在上面再套一层job 当然如过太复杂了而且这种定时需求很多的话 建议用quartz框架 使用很简单
Java 基本的定时任务,总结方法有三种:
①.? 创建一个thread,然后让它在while循环里一直运行着,通过sleep方法来达到定时任务的效果;
当启动和去取消任务时可以控制
第一次执行任务时可以指定你想要的delay时间
相比于Timer的单线程,它是通过线程池的方式来执行任务的
可以很灵活的去设定第一次执行任务delay时间
提供了良好的约定,以便设定执行的时间间隔
以上就是土嘎嘎小编为大家整理的java代码实现定时器相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!