我想创建一个类是IS0 TimerTask
和Thread
。我认为这个想法没有错。我在这篇文章here的“期望输出”部分提到了我这样做的原因。替代TimerTask,它支持等待完成?
Java类不能从两个类继承。那么,我该如何解决这个问题呢?
原因是我在我的问题中提到的帖子。
实际输出: 所有计时器任务都在主方法中执行。我的主代码的最后一个打印语句在所有计时器任务执行之前显示。我不想那样。
预期输出: 我希望main的最终打印语句在所有其他之后。
我想创建一个类是IS0 TimerTask
和Thread
。我认为这个想法没有错。我在这篇文章here的“期望输出”部分提到了我这样做的原因。替代TimerTask,它支持等待完成?
Java类不能从两个类继承。那么,我该如何解决这个问题呢?
原因是我在我的问题中提到的帖子。
实际输出: 所有计时器任务都在主方法中执行。我的主代码的最后一个打印语句在所有计时器任务执行之前显示。我不想那样。
预期输出: 我希望main的最终打印语句在所有其他之后。
你在问错误的问题。 Java中不可能有多重继承,但这不是你的实际目标。
你想要的是能够等待多个定时任务完成。有几种方法可以实现这一点。
也许最直接的就是使用ScheduledExecutionService
,它会给你一个Future
,你可以等待,类似于你习惯的join
方法。
另一种方法是使用CountDownLatch
让每个定时器任务在完成时递减锁存器;然后您可以使用await
等待他们完成。
还有一种策略是使用wait
和notify
原语自己构建同步 - 您的问题也不难解决这种问题。
思考但是,貌似还有一个问题 - 现在http://code.nomad-labs.com/2011/12/09/mother-fk-the-scheduledexecutorservice/ 不是很确定 – Time 2013-03-11 10:16:04
你期望什么样的例外?如果他们不应该导致任务被取消,那么你应该在你的任务中处理它们,否则他们会当你获得'未来'时,就会重新提出'ExecutionException'。至于停止后续执行,只有在抛出未捕获的异常时才会发生。我不确定我看到了问题。 – 2013-03-11 15:13:25
TimerTask的扩展和实现Runnable
编辑重申原来的问题后提出:检查https://stackoverflow.com/a/4951059/869488
你想要的设计不被Java支持。
受支持的设计是使用wait
和notify
而不是加入到TimerTask
线程(您不能这样做)。在这个SO问题下的示例:A good small example to demonstrate wait() and notify() method in java
“我想创建一个类是一个TimerTask,也是一个线程”为什么? – Cephalopod 2013-03-11 09:09:50
@Arian - 原因是我在我的问题中提到的帖子。所有计时器任务都在主要方法中执行。我的主代码的结束打印语句显示在所有计时器任务执行之前。我不想那样。我希望main的最终打印语句能够在其他所有内容之后出现。 – Time 2013-03-11 09:13:17
你应该为你的问题提出一个不同的问题,而不是质疑设计逻辑 – rajesh 2013-03-11 09:15:49