是否有任何创建时间线程的java api [重复]
Posted
技术标签:
【中文标题】是否有任何创建时间线程的java api [重复]【英文标题】:Is there any java api, that creates a time thread [duplicate] 【发布时间】:2012-08-15 11:44:05 【问题描述】:可能重复:How to timeout a threadstop a thread in java after a given time - doesn't work
(某种线程)可以监控特定任务所花费的时间,因此如果时间达到特定限制,它会重试它
【问题讨论】:
请给我一个例子,一个这样做的java代码 你的意思是java.util.Timer
?
【参考方案1】:
试试这个方法......
1. 使用 java.util.concurrent 中的CountDownLatch
。
2. CountDownLatch cdt = new CountDownLatch(10);
这将完成您的 10 个任务,并且每完成一项任务,计数就会减少 1。
当任务完成时,使用countDown()
方法减少计数。
使用await()
方法允许在10个任务完成后执行流程。
3. 运行另一个线程来监控CountDownLatch
完成
任务。
4.假设时间超过了你想要的时间,那么Re-initialize the CountDownLatch
【讨论】:
【参考方案2】:如果您只需要一个非常粗略的估计,您可以创建一个线程,让它休眠多久,然后检查是否需要重新启动任务。例如,您可以创建一个线程,其 run() 命令的主体如下:
Thread.sleep(5000); //5 seconds
while ( needToRestart() )
restart();
Thread.sleep(5000);
这将检查您的任务是否需要每 5 秒重新启动一次,并在必要时进行。重要的是要注意 Thread.sleep 不出于计时目的而准确,但如果确切的时间不重要,这是一个便宜的解决方案。
【讨论】:
让我们说,有一个工作,这个工作创建了 10 个任务。现在的问题是监控这 10 个任务,看看是否有任何任务卡住了,即某个特定任务是否需要 >=2 小时,然后取消它并重试它。在java中提供一个执行上述操作的示例代码。 你猜怎么着?以上将做到这一点。只需将 Vamsi Mohan Jayanti 所说的与上面的代码结合起来,并监控线程循环内的开始时间和当前时间之间的差异。在适当的时候,您可以轮询十个任务中的每一个。 *** 的目的不是让我们为你写代码,只是为了让你度过瓶颈期。如果您对我们的回答有任何具体问题,请告诉我们。 虽然在这一点上,java.util.Timer 会更好地完成这么长的任务。【参考方案3】:如果您为任务定义了 starttime 属性。您始终可以启动一个线程,并在 run() 方法中监控您的任务。从某种意义上说,它将测量 currentTime - startTime(可用于任务对象)并检查差异是否已达到阈值。
【讨论】:
让我们说,有一个工作,这个工作创建了 10 个任务。现在的问题是监控这 10 个任务,看看是否有任何任务卡住了,即某个特定任务是否需要 >=2 小时,然后取消它并重试它。在java中提供一个执行上述操作的示例代码。以上是关于是否有任何创建时间线程的java api [重复]的主要内容,如果未能解决你的问题,请参考以下文章