有没有办法知道timerTask是否已经完成?

时间:2013-08-25 17:42:29

标签: java timer timertask

我的问题是:我有两个代码块。一个块我只在Timer达到10秒时才执行..所以我用一段代码调用TimerTask ..我执行的另一个代码块只有我不执行进入TimerTask函数..(run()函数).. 有没有办法知道TimerTask是否已完成其执行,例如返回一个布尔变量?我正在用Java编程。

我试过了:

TimerTask emd = new EsperaMensagemDigitada(outgoing, incoming);
timer.schedule(emd, 10000);
if(emd.cancel() == true){
   messageOut = userInput.readLine();               
   outgoing.println(messageOut + "            [Sua vez]");
   System.out.println("Aguardando resposta...");
   outgoing.flush();    
}

但似乎它总是会执行if clausure中的代码..所以我还没有解决我的问题..

这个问题的另一部分是我有这个代码:

messageOut = userInput.readLine();

我想,如果用户没有输入任何消息10秒钟我打印一条默认消息,如果他输入消息直到10秒,我打印他的消息。问题是我被卡在userInput.readLine()上,等待一个条目..

2 个答案:

答案 0 :(得分:1)

当且仅当取消导致计划任务未运行且 false 否则(意味着该任务已被触发,可能正在进行或已使用boolean方法完成)

答案 1 :(得分:1)

我认为您应该将FutureTaskScheduledExecutorService用于此目的。 FutureTask有一个isDone方法来检查它是否已完成。由于TimerTask实现Runnable,您可以在FutureTask中轻松完成任务:

FutureTask<?> futureTask = new FutureTask<Void>(timerTask, null);
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.schedule(futureTask, 10, TimeUnit.SECONDS);
if (futureTask.isDone()) {
    // ...
}