1
A
回答
3
隨着執行人及期貨的幫助,我認爲這可能幫助
ExecutorService executor = Executors.newCachedThreadPool();
Future<String> future = executor.submit(new Callable<String>() {
public String call() throws Exception {
return someVeryLengthMethod();
}});
String result = null;
try {
result = future.get(2, TimeUnit.MINUTES);
} catch (InterruptedException e) {
// Somebody interrupted us
} catch (ExecutionException e) {
// Something went wring, handle it...
} catch (TimeoutException e) {
// Too long time
future.cancel(true);
}
// Continue with what we have...
這將等待答案指定的ti如果在這段時間內結果不可用,未來將被取消(這可能會或可能不會實際停止執行該任務),並且代碼可以繼續。
6
使用jcabi API已經爲這種事情非常有益的:jcabi API
非常漂亮的基於註解的API,所以在你的情況下,它會像這樣工作:
@Timeable(limit = 120, unit = TimeUnit.SECONDS)
public void methodYouWantToTime(){...}
4
的組合以下可能的工作:
時間跟蹤:
// use this to record when a process started
long start = System.currentTimeMillis();
// subsequent calls can be used to track how long something has been running?
long timeInMillis = System.currentTimeMillis() - start;
級獨立的進程:
java.lang.Thread // Extend this class
// And implement your own run() method.
在這種等待單獨的線程來完成的循環,你可以使用:
Thread.interrupt(); // This method could then be used to stop the execution
Thread.stop(); // This is also another way to stop execution, but it is deprecated and its use is frowned upon!
HTH
0
這個問題是在不同的線程中解釋。最好的方法是使用帶有超時的ThreadPool(請參閱ExecutorService)。
例,提交任務並等待60秒的回答:
ExecutorService pool = Executors.newCachedThreadPool();
Future<Object> future = pool.submit(new Callable<Object>() {
@Override
public Object call() throws Exception {
Thread.sleep(1000);
return this;
}
});
Object result = future.get(60, TimeUnit.SECONDS);
如果你想等待一個任務的完成,但你不希望任何輸出,更好地利用:
pool.submit(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
// Wait until the task is completed, then shut down the pool
pool.awaitTermination(60, TimeUnit.SECONDS);
本線程中的更多細節:ExecutorService that interrupts tasks after a timeout
相關問題
- 1. 如何在繼續之前等待方法完成完成?
- 2. 等待完成處理程序完成,然後繼續
- 3. 如何等待任務完成,然後在事件分派線程中繼續?
- 4. 等待方法的n個執行再繼續後完成
- 5. 如何讓Java在繼續之前等待方法完成?
- 6. 等待過程完成,然後再繼續使用Java
- 7. 等待意圖完成,然後再繼續活動
- 8. PHP - 等待幾秒鐘後繼續?
- 9. 如何等待findOneAndUpdate完成後再繼續async.series
- 10. C#如何等待網頁完成加載,然後繼續在watin
- 11. 如何等待ftp請求完成,然後繼續執行程序
- 12. 等功能完成並返回響應然後繼續forloop
- 13. 等待地理編碼器功能完成執行,然後繼續然後繼續
- 14. 等待繼續代碼,直到Loader.load方法()完成加載
- 15. cocoa touch:等待繼續之前完成的方法
- 16. 等待庫方法在繼續之前完成
- 17. 如何注入ui-thread並等待注射完成後再繼續?
- 18. 讓Winforms應用程序等待幾分鐘後再繼續
- 19. 如何等待BackgroundWorker完成,然後退出控制檯應用程序
- 20. 等待2線程完成前繼續程序
- 21. 如何在繼續(Android)之前等待結果回調完成的方法?
- 22. 等待異步調用完成第一,然後繼續在Java中
- 23. 等待一個函數完成,然後再繼續使用Javascript或jQuery
- 24. 暫停並等待按鈕被點擊,然後繼續
- 25. Android - 等待Volley響應完成並繼續執行
- 26. 等待斯卡拉未來完成並繼續下一個
- 27. 播放聲音,等待它完成播放並繼續(iphone)
- 28. 等待RunOnUIThread完成並繼續執行其餘任務
- 29. 什麼讓.NET任務在等待I/O完成後繼續?
- 30. 等待任務完成後再繼續下一個任務
請問您可以添加一些代碼嗎? –
請發佈您的嘗試/想法。 – Maroun
在想要等待的線程中使用'join(2000);'。 –