【发布时间】:2017-07-10 19:08:47
【问题描述】:
请花时间阅读以下内容。非常感谢您的帮助
我有一个需要监控一些实时活动的场景。例如,一个方法在几毫秒内被实时调用。我必须像第一次调用该方法和最后一次调用该方法一样进行监视。
所以,在最后一次点击该方法之后,我需要等待某个时间,比如说 10 秒,看看它是否在这段时间内没有再次调用。如果它没有被调用,那么我需要运行一些代码。
我想使用 ExecuterService 并使用 newCachedThreadPool()。但我对如何实现这一点感到困惑。
如果你不确定我在说什么,举个例子,比如当网络出现故障并且你在哪里接收到心跳并且你突然停止接收它,然后你会在屏幕上显示一些错误消息,例如连接不可用。在我的情况下,它是一些第三方应用程序,它正在发送一些消息并且它只是一种通信方式。就像,我的应用程序发送了一些请求,而其他应用程序继续发送响应。因此,我需要监视该响应,并且需要知道我何时收到最后一个响应。
我的方法 - 我想在每次调用该方法时执行一个任务,该任务将等待 10 秒并在 10 秒内,如果再次调用该方法,它将以某种方式取消当前任务并将创建另一个任务(或如果可能的话重用),该任务将再次运行 10 秒。这将继续发生,直到收到最后一条消息(最后一次调用该方法时),然后在 10 秒延迟结束后,将执行任务并运行一些代码以在 UI 上显示错误消息。
我之前使用过 Timer,它解决了这个问题,但是作为 new Timer 产生了性能问题,每次收到新消息时都会实例化一个新的 TimerTask,因此会创建大量垃圾收集器无法快速回收的对象,从而导致 outOfMemory 错误并使服务器无响应。显然这是一个糟糕的代码,这就是我在这里寻求帮助的原因。
请帮助我提供一些解决此问题的方法。
【问题讨论】:
-
我一直认为 ThreadPools 提供了易于使用的控制。如果我这样做,我不会使用它们,但这是我个人的喜好
-
如果某些应用程序代码在 t 秒内没有执行,是否要发出警报?这是问题陈述吗?如果是,请重新表述您的问题以明确说明。如果不是,请重新表述您的问题以说明真正的问题。
标签: java multithreading performance threadpoolexecutor java-threads