java有计时器?如何并行计时

zings 2010-01-08 11:24:34
我想对一个要执行的任务进行计时,如果时间超过一个固定时间 如180s就结束 ,貌似不好设计,望大家指点一下
我写的代码如下:

Timer timer = new Timer(); //设定计时器,执行时同步判断
timer.schedule(new ConnectTask(), 0, 180000); //180s循环,即超过180秒,断开连接,他是循环的这可行?
boolean finished = true;
int count = 0;
try {
while (finished) {
count++;
new Thread(new ConnectTask()).sleep(1000); //每1秒判断一次执行完成没有
if (timeflag == 1) {
finished = false;
// timer.cancel();
break;
}
if(count > 180){
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}finally{
disconnect();
timer.cancel();
}


public class ConnectTask extends TimerTask { //执行命令时,定义一个计时器,判断执行时间
public void run() {
try {
JudgeAccess();
} catch (Exception e) {
e.printStackTrace();
}
timeflag = 1;
}
}


我这种方法貌似要先执行玩schedule方法之后才能执行下面判断180次,schedule方法是执行循环的,不知道Java中有没有计时的,我不是要循环执行,我想180s还没执行完就强制断开。。。执行下一个。。。我想突出一个同时/并行计时 判断的问题。。。

希望高手指点!!!谢谢。。
...全文
618 15 打赏 收藏 举报
写回复
15 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zings 2010-01-11
  • 打赏
  • 举报
回复
哇咔咔,多谢大家,基本已经解决了,先贴上自己测试的例子,有问题请大家更正,谢谢!!!
测试代码如下:

private int timeflag = 0;

public TimerTest() {
}

public static void main(String[] args) {
TimerTest timertest = new TimerTest();
timertest.execute();
}

public void execute(){
Timer timer = new Timer(false); //设定计时器
timer.schedule(new StopTask(), new Date(System.currentTimeMillis() + 5000));
ConnectTask();
if(timeflag==1){
System.out.println("程序已经执行完成,直接退出");
// timer.cancel();
System.exit(0);
}
}

public void ConnectTask(){//当前要执行的任务
System.out.println("进入要执行的任务");
//加入这个用于测试当执行超过5s是否能够退出
// try {
// new Thread().sleep(6000);
// } catch (Exception e) {
// }
timeflag = 1;
}

public class StopTask extends TimerTask { //执行停止任务
public void run() {
try {
System.out.println("超时,任务终止");
System.exit(0);
} catch (Exception e) {
e.printStackTrace();
}
}
}


集思广益,谢谢大家了。。。主要采用Landor2004提供的思想,有点逆向思维。。。以上方法有问题,请指正,谢谢。。。
potahai 2010-01-11
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 landor2004 的回复:]
Java codeTimer timer=new Timer(false);//从现在开始延迟180000ms,执行StopTasktimer.schedule(new StopTask(),new Date(System.currentTimeMillis()+180000));

不过线程的强制停止,jdk已经废弃了stop方法,他建议你用一个boolean来判断,但是如果在循环里产生卡死情况,也是处理不了;只要还是根据自己的业务来设计,开避免这种问题

[/Quote]
那如果任务提前结束的话如何 不等待180S结束 进行下一个任务的开始
potahai 2010-01-11
  • 打赏
  • 举报
回复
学习了
鲜为人知 2010-01-09
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 landor2004 的回复:]
Java codeTimer timer=new Timer(false);//从现在开始延迟180000ms,执行StopTasktimer.schedule(new StopTask(),new Date(System.currentTimeMillis()+180000));

[/Quote]
这个好,。如果我会用线程判断有误到时,如果到了就执行停止
Landor2004 2010-01-09
  • 打赏
  • 举报
回复
Timer timer = new Timer(false);
//从现在开始延迟180000ms,执行StopTask
timer.schedule(new StopTask(), new Date(System.currentTimeMillis() + 180000));


不过线程的强制停止,jdk已经废弃了stop方法,他建议你用一个boolean来判断,但是如果在循环里产生卡死情况,也是处理不了;只要还是根据自己的业务来设计,开避免这种问题
牛叔 2010-01-08
  • 打赏
  • 举报
回复
这个我也想知道。。。
handsome_huxiulei 2010-01-08
  • 打赏
  • 举报
回复
o(︶︿︶)o 唉 我只知道a Timer
zings 2010-01-08
  • 打赏
  • 举报
回复
up一下,等着实现。。。
potahai 2010-01-08
  • 打赏
  • 举报
回复
你这个程序就是 有一个状况比较难处理, 就是ConnectTask() 的超过180秒还未结束的时候如何去终止它

我想的是这样 只是一个构思 希望对你有用。

就是当你的 Timer timer = new Timer(); //设定计时器,执行时同步判断
timer.schedule(new ConnectTask(), 0, 180000);开始运行后
你还要再起一个线程给这个程序运行计时 ,并且到了180S就直接终止当前的那个任务。直接把timer.cancel();然后在清空开始和结束的时间,并且 在启动TIMER
zings 2010-01-08
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 huntor 的回复:]
使用java.util.concurrent包 提供工具
[/Quote]
我看看。。。我就想实现一个计时器,有那么困难么?Java里面没有这个?

就是像一个秒表计时一样,你开始跑步,同时开始计时,我看秒表10秒你跑完没有,20秒,你跑完没有,30秒你跑完没有。。。如果还没有,算了,你不用跑了,离场吧。。。

就是我看秒表,你一跑,我给你计时,如果30s你还没有跑完,不好意思,out 。。。秒表恢复原状,请下一个人跑吧,再计时开始。。。。如果30s内跑完了,计时也停止,让下下个人跑时再开始计时。。。
就这样。。。
colin_pxx 2010-01-08
  • 打赏
  • 举报
回复
学习 楼主记得解决了的时候公布解决办法啊
huntor 2010-01-08
  • 打赏
  • 举报
回复
使用java.util.concurrent包 提供工具
zings 2010-01-08
  • 打赏
  • 举报
回复
就是很简单的想法嘛,可能我解释的比较不清楚

就是:执行一个任务同时计时,隔断时间判断这个任务执行完了没有,完了就结束,没完的话,如果这个任务执行时间超过了180s还没有完,就强行结束。。。

我就是得到这个从执行任务开始时间过了多长。。。这个时间是否就是用计时器得到的?通过这个时间判断结束掉任务。。

上面的我也感觉有问题 但是不知道怎么改啊。。。
potahai 2010-01-08
  • 打赏
  • 举报
回复
不了解你的并时进行是怎么一个概念。

timer.schedule(new ConnectTask(), 0, 180000);

我感觉判断 是否结束应该在 ConnectTask 里起一个线程去时时判断结束没有 ,感觉不应该是你这样的。

麻烦你详细说下你的想法
zings 2010-01-08
  • 打赏
  • 举报
回复
没人知道么?就是并行执行计时。。。难道不是用timer???
发帖
Java

4.9w+

社区成员

Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
帖子事件
创建了帖子
2010-01-08 11:24
社区公告
暂无公告