我的问题是:我有两个代码块。一个块我只在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()上,等待一个条目..
答案 0 :(得分:1)
当且仅当取消导致计划任务未运行且 false 否则(意味着该任务已被触发,可能正在进行或已使用boolean
方法完成)
答案 1 :(得分:1)
我认为您应该将FutureTask与ScheduledExecutorService用于此目的。 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()) {
// ...
}