我不知道我是否正確解釋問題(因爲其他答案表明否則),但我收集,你想實現您的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