导航:首页 > 编程语言 > java中timer

java中timer

发布时间:2022-08-22 04:30:40

1. 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方法,使整个程序(所有线程)终止。

2. 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秒后执行此任务
}

}

3. 怎么用java中的timer做出延迟效果

new Thread(new Runnable() {
public void run() {
while(true) {
repaint();
Thread.sleep(500);
}
}
}).start();
这样就没错误了。

要用延迟的话,不妨试试java.util.Timer().
new java.util.Timer().schele(new TimerTask(){
public void run() {
//这里写延迟后要运行的代码
repaint();
//如果只要这个延迟一次,用cancel方法取消掉.
this.cancel();

}}, 3000);
//参考参考java帮助文挡,也可以以固定间隔连续执行.
复制别人的过来的,望采纳

4. 什么是JavaTimer类如何创建一个有特定时间间隔的任务

java.util.Timer是一个工具类,可以用于安排一个线程在未来的某个特定时间执行。Timer类可以用安排一次性任务或者周期任务。
java.util.TimerTask是一个实现了Runnable接口的抽象类,需要去继承这个类来创建自己的定时任务并使用Timer去安排它的执行。

5. 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来间隔一段时间执行一个操作,也是通过一个线程来做到的。

6. java 中定时器timer是被什么触发的

java中有个定时任务java.util.TimerTask用法很简单class MyTask extends java.util.TimerTask{@Overridepublic void run() {// 这个任何所执行的代码}}java.util.Timer timer = new Timer(true);//treu就是守护线程MyTask task = new MyTask();//开始执行任务,第一个参数是任务,第二个是延迟时间,第三个是每隔多长时间执行一次timer.schele(task, 0 , 1000 * 60 * 60 * 24);

7. java timer(2000,this)什么意思

首先:用到需要定时去检查文件是否更新的功能
eg.
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来间隔一段时间执行一个操作,也是通过一个线程来做到的。

8. java定时器怎么停止

1、scheleUpdate
加入当前节点后,程序会每帧都会自动执行一次默认的Update函数。(注:一定是Update函数哦,若想调用其他自己命名的函数则使用schele)
看例子,走起。
首先在HelloWord类的头文件中声明Update函数:
[cpp] view plain print?
void update(float dt); //注意参数类型
然后在HelloWorld类源文件中实现函数Update:

[cpp] view plain print?
void HelloWorld::update(float dt)
{
CCLOG("");
}
现在我们可以调用了,在需要他不断执行的地方加入调用的代码就ok:

[cpp] view plain print?
this->scheleUpdate(); //this是当前节点,如layer,所以可以省略啦。

运行之后你将会看到不断有被打印出来
2、scheleUpdate
可以没隔几秒执行某个自定义的函数,来看代码:
首先还是在HelloWorld中声明所要执行的函数:

9. 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()中放入自己想要执行的代码。
够清楚了吧?

10. java关于Timer计时器的问题求解

timer内部有TimerTask。TimerTask可以取消cancel()。取消了,但是还在timer内部。
timer.purge()移除取消了的任务。
所以
最好
cancel
之后调用
purge
然后
置空timer
timer
=null;
不调用timer.cancel(),timerTask线程会一直被执行,
调用timer.cancel(),timerTask也会执行完当次之后结束。
最好
if(timer!=null){
timer.cancel();
timer.purge();
timer=null;
}

阅读全文

与java中timer相关的资料

热点内容
程序员简易表白代码 浏览:163
什么是无线加密狗 浏览:60
国家反诈中心app为什么会弹出 浏览:64
cad压缩图打印 浏览:100
网页打开速度与服务器有什么关系 浏览:860
android开发技术文档 浏览:62
32单片机写程序 浏览:43
三星双清无命令 浏览:835
汉寿小程序源码 浏览:340
易助erp云服务器 浏览:530
修改本地账户管理员文件夹 浏览:416
python爬虫工程师招聘 浏览:283
小鹏p7听音乐哪个app好 浏览:354
linux下的防火墙 浏览:954
凌达压缩机美芝压缩机 浏览:350
php后面代码不执行 浏览:236
微我手机怎样设置应用加密 浏览:203
条件加密 浏览:628
androidstudio设置中文 浏览:642
汽车换压缩机能提升制冷 浏览:629