① 请问java中,怎么设置程序的运行间隔,Timer应该怎么用
publicclasstimerextendsThread
{
publicstaticvoidmain(String[]args)
{
timerrunner=newtimer();
runner.start();
}
publicvoidrun(){
for(inti=0;i<10;i++){
System.out.println(i);
try{
Thread.sleep(1000);//睡眠1000毫秒
}catch(InterruptedExceptione){e.printStackTrace();}
}
}
}
② JAVA TIMER怎么样使用
void cancel()
终止此计时器,丢弃所有当前已安排的任务。
int purge()
从此计时器的任务队列中移除所有已取消的任务。
void schele(TimerTask task, Date time)
安排在指定的时间执行指定的任务。
void schele(TimerTask task, Date firstTime, long period)
安排指定的任务在指定的时间开始进行重复的固定延迟执行。
void schele(TimerTask task, long delay)
安排在指定延迟后执行指定的任务。
void schele(TimerTask task, long delay, long period)
安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。
void scheleAtFixedRate(TimerTask task, Date firstTime, long period)
安排指定的任务在指定的时间开始进行重复的固定速率执行。
void scheleAtFixedRate(TimerTask task, long delay, long period)
安排指定的任务在指定的延迟后开始进行重复的固定速率执行。
我前几天刚用过 这是我的代码:
timer.scheleAtFixedRate(new TimerTask(), ConfigUtil.TIME_DELAY, Integer.parseInt(distance)*60000);
三个解释:new TimerTask()这是一个TimerTask对象,里面有一个run()方法
是你想要执行的代码。
ConfigUtil.TIME_DELAY这个是延迟的时间 (毫秒单位)
Integer.parseInt(distance)*60000 这个是每隔多长时间执行一次
TimerTask中的run()方法(毫秒单位)
简单一点就是 写成这样:
Timer timer = new Timer();
timer.scheleAtFixedRate(new TimerTask(), 1000, 60000);
意思就是 每隔6秒(相当于60000毫秒)的时间 在经过1秒的延迟,执行一次
TimerTask中的方法。new TimerTask()就是写一个类 然后继承TimerTask,然后重写其中的run()方法,在run()中放入自己想要执行的代码。
够清楚了吧?
③ java的timer类如何判断程序超时呢
参照如下的:
Timer类是用来执行任务的类,它接受一个TimerTask做参数
TimerTask是个抽象类,他扩展了Object并实现了Runnable接口,因此你必须在自己的Task中实现publicvoid run()方法。这也就是我们需要执行的具体任务。
Timer有两种执行任务的模式,最常用的是schele,它可以以两种方式执行任务:1:在某个时间(Data),2:在某个固定的时间之后(intdelay).这两种方式都可以指定任务执行的频率
我们指定一个线程A,调用对象B.wait(timeout),线程A就会阻塞,直到timeout到了,B醒来会使A继续执行。
其实Timer类是为多任务定时设计的,在实现里面,B是一个任务队列(实现上就是一个array),维护着所有使用当前Timer定时的任务,它们可是一堆货真价实的线程实例。每次线程A都取队列中距离当前时间最近的的定时任务,跟当前时间比较,然后wait(timeout)这段时间。线程唤醒的时刻也是队列中这个定时任务运行的时刻。然后线程继续取下一个定时任务,继续wait(timeout)。从这里我们能看出来,每次定时都有额外的时间开销,比如要维护队列等,所以Java的Timer类不保证实时。
Timer中最主要由三个部分组成:
任务TimerTask 、 任务队列: TaskQueue queue 和 任务调试者:TimerThreadthread
Timer对任务的调度是基于绝对时间的。
所有的TimerTask只有一个线程TimerThread来执行,因此同一时刻只有一个TimerTask在执行。
任何一个TimerTask的执行异常都会导致Timer终止所有任务。
由于基于绝对时间并且是单线程执行,因此在多个任务调度时,长时间执行的任务被执行后有可能导致短时间任务快速在短时间内被执行多次或者干脆丢弃多个任务。
由于Timer/TimerTask有这些特点(缺陷),因此这就导致了需要一个更加完善的任务调度框架来解决这些问题。
默认情况下,只要一个程序的timer线程在运行,那么这个程序就会保持运行。当然,你可以通过以下四种方法终止一个timer线程:
调用timer的cancle方法。你可以从程序的任何地方调用此方法,甚至在一个timertask的run方法里。
让timer线程成为一个daemon线程(可以在创建timer时使用newTimer(true)达到这个目地),这样当程序只有daemon线程的时候,它就会自动终止运行。
当timer相关的所有task执行完毕以后,删除所有此timer对象的引用(置成null),这样timer线程也会终止。
调用System.exit方法,使整个程序(所有线程)终止。
④ java timer类自动执行
javax.swing.Timer
在指定时间间隔触发一个或多个 ActionEvent。一个示例用法是动画对象,它将 Timer 用作绘制其帧的触发器。
设置计时器的过程包括创建一个 Timer 对象,在该对象上注册一个或多个动作侦听器,以及使用 start 方法启动该计时器。例如,以下代码创建并启动一个每秒(该时间由 Timer 构造方法的第一个参数指定)触发一次动作事件的计时器。Timer 构造方法的第二个参数指定接收计时器动作事件的侦听器。
int delay = 1000; //milliseconds
ActionListener taskPerformer = new ActionListener() {
public void actionPerformed(ActionEvent evt) {
//...Perform a task...
}
};
new Timer(delay, taskPerformer).start();构造 Timer 时要指定一个延迟参数和一个 ActionListener。延迟参数用于设置初始延迟和事件触发之间的延迟(以毫秒为单位)。启动了计时器后,它将在向已注册侦听器触发第一个 ActionEvent 之前等待初始延迟。第一个事件之后,每次超过事件间延迟时它都继续触发事件,直到被停止。
构造之后,可以单独更改初始延迟和事件间延迟,并且可以添加其他 ActionListener。
如果希望计时器只在第一次时触发然后停止,可以对计时器调用 setRepeats(false)。
尽管所有 Timer 都使用一个共享线程(由第一个执行操作的 Timer 对象创建)执行等待,但是 Timer 的动作事件处理程序还会在其他线程(事件指派线程上)执行。这意味着 Timer 的操作处理程序可以安全地在 Swing 组件上执行操作。但是,它也意味着处理程序必须快速执行以保证 GUI 作出响应。
在 1.3 版本中,向 Java 平台添加了另一个 Timer 类:java.util.Timer。该类和 javax.swing.Timer 的基本功能相同,但是 java.util.Timer 更常用,功能更多。javax.swing.Timer 有两个特征,它们可以让使用 GUI 更方便。首先,其事件处理程序都是 GUI 程序员所熟悉的,并且可以更简单地处理事件指派线程。第二,其自动线程共享意味着不必采取特殊步骤来避免生成过多线程。相反,计时器使用同一个线程让光标闪烁、使工具提示显示等等。
new Timer().schele(new TimerTask(){
public void run() {
System.exit(0);
}}, 5000);
5秒后自动运行run里的内容,如果setRepeats(ture),5秒一个周期的自动运行。
⑤ Java中Timer的用法
这是方法1 你看可以么还有方法2 就是取两个时间差(毫秒数) 得到结果
⑥ java 中timer类的用法是什么
现在项目中用到需要定时去检查文件是否更新的功能。timer正好用于此处。
用法很简单,new一个timer,然后写一个timertask的子类即可。
package comz.autoupdatefile;
import java.util.Timer;
import java.util.TimerTask;
public class M {
public static void main(String[] args) {
// TODO todo.generated by zoer
Timer timer = new Timer();
timer.schele(new MyTask(), 1000, 2000);
}
}
class MyTask extends TimerTask {
@Override
public void run() {
System.out.println("dddd");
}
}
这样,就可以在1秒钟之后开始执行mytask,每两秒钟执行一次。
当然,timer的功能也可以通过自己构造线程,然后在线程中用sleep来模拟停止一段时间,然后再执行某个动作。
其实,看一下timertask的源码就立即可以知道,timertask就是实现了runnable接口的。也就是说,通过timer来间隔一段时间执行一个操作,也是通过一个线程来做到的。
⑦ java 定时器 timer
很简单的一个程序,两种实现方式,可以弄一个线程在一个while循环里一直跑,一次sleep一分钟,判断当前时间是否是你要的时间,如果是就触发你的任务。
另外一种方法是,直接计划三个任务,到时间它会自己执行:new Timer().schele(task, time);
⑧ java timer 用法
import java.util.Timer;
public class TimerTest1 {
static class MyTask extends java.util.TimerTask {
public void run() {
System.out.println("开始");
}
}
static class Shutdown extends java.util.TimerTask {
Timer timer = null;
public Shutdown() {
}
public Shutdown(Timer mytimer) {
timer = mytimer;
}
public void run() {
System.out.println("结束");
timer.cancel();// 使用这个方法退出任务
}
}
public static void main(String[] args) {
Timer timer = new Timer();
timer.schele(new MyTask(), 1000);// 在1秒后执行此任务
timer.schele(new Shutdown(timer), 3000);// 在3秒后执行此任务
}
}
⑨ java timer怎么才配置具体的定时任务去调用方法去执行呢
TimerTask那定义一个变量 private static boolean going = false; 然后修改run方法 public void run() { if (going)return; going = true; //做你的事情 going = false; } 这个可以保证2秒执行一次,如果一次任务超过两秒,下一次执行会在开始就结束。等待两秒后再检查 如果希望前一次任务若超过两秒,后一次直接在前一次执行结束立即开始 可以换用Thread Thread t = new Thread(){ private static boolean going = true; public void run() { while(going){ int start = System.currentTimeMillis(); //做你的事 int cost = System.currentTimeMillis() - start; if (cost < 2000) { try{ sleep(2000 - cost); }catch(Exception ex){} } } } }; t.start();