是否有任何创建时间线程的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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

安全地暂停线程[重复]

如何在 Java 中删除重复的列表遍历

Java 是不是有任何用于 Gmail 聊天的 API?

是否有任何 API 可以从 Java 源文件生成包结构

将音乐复制到 iPod 的 API [重复]

java四种线程池简介,使用