重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

java定时器执行代码,java线程定时器

java代码启动一个定时任务

在应用里经常都有用到在后台跑定时任务的需求。举个例子,比如需要在服务后台跑一个定时任务来进行非实时计算,清除临时数据、文件等。在本文里,3种不同的实现方法:

创新互联是一家专业提供霍山企业网站建设,专注与成都网站设计、成都网站制作、H5高端网站建设、小程序制作等业务。10年已为霍山众多企业、政府机构等服务。创新互联专业的建站公司优惠进行中。

普通thread实现

TimerTask实现

ScheduledExecutorService实现

1.普通thread

这是最常见的,创建一个thread,然后让它在while循环里一直运行着,通过sleep方法来达到定时任务的效果。这样可以快速简单的实现,代码如下:

public class Task1 {

public static void main(String[] args) {

// run in a second

final long timeInterval = 1000;

Runnable runnable = new Runnable() {

public void run() {

while (true) {

// ------- code for task to run

System.out.println("Hello !!");

// ------- ends here

try {

Thread.sleep(timeInterval);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

};

Thread thread = new Thread(runnable);

thread.start();

}

}

2.用Timer和TimerTask

上面的实现是非常快速简便的,但它也缺少一些功能。

用Timer和TimerTask的话与上述方法相比有如下好处:

当启动和去取消任务时可以控制

第一次执行任务时可以指定你想要的delay时间

在实现时,Timer类可以调度任务,TimerTask则是通过在run()方法里实现具体任务。

Timer实例可以调度多任务。

当Timer的构造器被调用时,创建了一个线程,这个线程可以用来调度任务:

import java.util.Timer;

import java.util.TimerTask;

public class Task2 {

public static void main(String[] args) {

TimerTask task = new TimerTask() {

@Override

public void run() {

// task to run goes here

System.out.println("Hello !!!");

}

};

Timer timer = new Timer();

long delay = 0;

long intevalPeriod = 1 * 1000;

// schedules the task to be run in an interval

timer.scheduleAtFixedRate(task, delay,

intevalPeriod);

} // end of main

}

3.ScheduledExecutorService

ScheduledExecutorService是从Java SE 5的java.util.concurrent里,做为并发工具类被引进的,这是最理想的定时任务实现方式。

相比于上两个方法,它有以下好处:

相比于Timer的单线程,它是通过线程池的方式来执行任务的

可以很灵活的去设定第一次执行任务delay时间

提供了良好的约定,以便设定执行的时间间隔

通过ScheduledExecutorService#scheduleAtFixedRate展示这个例子,通过代码里参数的控制,首次执行加了delay时间:

import java.util.concurrent.Executors;

import java.util.concurrent.ScheduledExecutorService;

import java.util.concurrent.TimeUnit;

public class Task3 {

public static void main(String[] args) {

Runnable runnable = new Runnable() {

public void run() {

// task to run goes here

System.out.println("Hello !!");

}

};

ScheduledExecutorService service = Executors

.newSingleThreadScheduledExecutor();

service.scheduleAtFixedRate(runnable, 0, 1, TimeUnit.SECONDS);

}

}

在Java中如何设置一个定时任务的代码应该怎么写?

指定定时任务的代码如下:

public void schedule(TimerTask task,Date time)

比如,我们希望定时任务2006年7月2日0时0分执行,只要给第二个参数传一个时间设置为2006年7月2日0时0分的Date对象就可以了.

有一种情况是,可能我们的程序启动的时候,已经是2006年7月3日了,这样的话,程序一启动,定时任务就开始执行了.

schedule最后一个重载的方法是

public void schedule(TimerTask task,Date firstTime,long period)

既然号称是定时任务,我们肯定希望由我们来指定任务指定的时间,显然上面的方法就不中用了,因为我们不知道程序什么时间开始运行,就没办法确定需要延时多少.没关系,schedule四个重载的方法还没用完呢.用下面这个就OK了。

求一个简单的Java定时器源代码

我是让它每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();

ca1.add(Calendar.SECOND, 20);

}

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{

System.out.println("耗时"+String.valueOf(s)+"秒");

}

ca.add(Calendar.MILLISECOND, 10);

timer.schedule(

new TimerTask() {

public void run() {

System.out.println("时间在溜走。。。。");

Time();

}

}, ca.getTime());

}

void getcon(){

Connection con=null;//获取Connection

chu();

Time();

}


当前名称:java定时器执行代码,java线程定时器
文章路径:http://cqcxhl.cn/article/dsipepg.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP