我不知道我是否正确解释问题(因为其他答案表明否则),但我收集,你想实现您的getStaticJsonResponse()
调用超时(我假设是一个阻止网络通话)?
如果确实如此,这不是一件简单的事情 - 在同步API上实现超时并不容易。
一种方法是使用任务线程。在这种情况下,您将创建一个新的类像下面这样:
class JSONRequester implements Runnable
{
@Override
public void run ()
{
getStaticJsonResponse("build", "post");
}
}
这基本上只是声明,可以在一个单独的线程运行getStaticJsonResponse()
类。原始线程随后可以自由监视任务线程,并在运行时间过长时终止它。
要实现超时(的,也就是说,3秒),然后你可以做类似如下:
...
// Create and start the task thread.
Thread taskThread = new Thread(new JSONRequester ());
taskThread.start();
// Wait 3 seconds.
sleep(3000);
// If after waiting 3 seconds the task is still running, stop it.
if (taskThread.isAlive())
taskThread.interrupt();
...
这里,主线程启动任务线程,这反过来又调用您的getStaticJsonResponse()
方法。然后等待三秒钟,并检查线程是否仍在运行。如果线程正在运行(即getStaticJsonResponse()
尚未完成),它将调用线程的interrupt()
方法,这将导致InterruptedException
在JSONRequester
s run()
方法中抛出,从而终止任务线程。
编辑:我要指出,这是假定对代码做一点内getStaticJsonResponse()
,特别是,无论哪里的线程被阻塞满足的条件之一为响应interrupt()
通话上市here。然而,在网络代码中(这似乎是),这通常是一个非常安全的假设。
来源
2012-02-21 09:37:58
Mac
你将不得不使用多线程 – 2012-02-21 09:19:54