守时器类Timer在java.util包中。运用时,先实例化,然后运用实例的schedule(TimerTasktask,longdelay)办法,设定指定的使命task在指定的推迟delay后运转。守时器使命类TimerTask是抽象类,继承并重写其run()办法,可实现具体使命。
schedule(TimerTasktask,Datetime)设定指定使命task在指守时刻time运转。
cancel()办法完毕这个守时器。
schedule(TimerTasktask,longdelay,longperiod)办法设定指定使命task在指定推迟delay后进行固定推迟peroid的运转。
scheduleAtFixedRate(TimerTasktask,longdelay,longperiod)办法设定指定使命task在指定推迟delay后进行固定频率peroid的运转。
要实现一个守时使命,运用java中的Timer和TimerTask类可以很easy实现实时调用处理函数。这两个类运用起来很便利,可以完成我们对守时器的绝大多数需要。
java定时器怎么设置时间
第一种:
创立一个thread,然后让它在while循环里一向运转着,经过sleep方法来达到守时使命的作用,代码如下
publicclassTask1{
publicstaticvoidmain(String[]args){
//runinasecond
//每一秒钟履行一次
finallongtimeInterval=1000;
Runnablerunnable=newRunnable(){
publicvoidrun(){
while(true){
//-------codefortasktorun
//-------要运转的使命代码
System.out.println("Hello,stranger");
//-------endshere
try{
//sleep():同步延迟数据,并且会堵塞线程
Thread.sleep(timeInterval);
}catch(InterruptedExceptione){
e.printStackTrace();
}
}
}
};
//创立守时器
Threadthread=newThread(runnable);
//开端履行
thread.start();
}
}
第二种:
启动和去取消使命时能够控制,能够指定你想要的delay(开端履行的等待时刻)时刻,在完成时,Timer类能够调度使命,TimerTask则是经过在run()方法里完成具体使命。Timer实例能够调度多使命,它是线程安全的。当Timer的构造器被调用时,它创立了一个线程,这个线程能够用来调度使命。代码如下:
//调用的东西
importjava.util.Timer;
importjava.util.TimerTask;
publicclassTask2{
publicstaticvoidmain(String[]args){
/**
*Timer:是一个守时器东西,用来履行指定使命
*TimerTask:是一个抽象类,他的子类能够代表一个被Timer方案的使命
*/
TimerTasktask=newTimerTask(){
@Override
publicvoidrun(){
//tasktorungoeshere
//履行的输出的内容
System.out.println("Hello,stranger");
}
};
Timertimer=newTimer();
//定义开端等待时刻---等待5秒
//1000ms=1s
longdelay=5000;
//定义每次履行的距离时刻
longintevalPeriod=5*1000;
//schedulesthetasktoberuninaninterval
//组织使命在一段时刻内运转
timer.scheduleAtFixedRate(task,delay,intevalPeriod);
}//endofmain
}
第三种:
比较于上两个方法,它有以下好处:
1.比较于Timer的单线程,它是经过线程池的方法来履行使命的
2.能够很灵活的去设定第一次履行使命delay时刻
3.提供了杰出的约定,以便设定履行的时刻距离
//调用的东西
importjava.util.concurrent.Executors;
importjava.util.concurrent.ScheduledExecutorService;
importjava.util.concurrent.TimeUnit;
publicclassTask3{
publicstaticvoidmain(String[]args){
/**
*Runnable:完成了Runnable接口,jdk就知道这个类是一个线程
*/
Runnablerunnable=newRunnable(){
//创立run方法
publicvoidrun(){
//tasktorungoeshere
System.out.println("Hello,stranger");
}
};
//ScheduledExecutorService:是从JavaSE5的java.util.concurrent里,
//做为并发东西类被引进的,这是最理想的守时使命完成方法。
ScheduledExecutorServiceservice=Executors
.newSingleThreadScheduledExecutor();
//第二个参数为首次履行的延时时刻,第三个参数为守时履行的距离时刻
//10:秒5:秒
//第一次履行的时刻为10秒,然后每隔五秒履行一次
service.scheduleAtFixedRate(runnable,10,5,TimeUnit.SECONDS);
}
}