我有一個方法返回一個字符串,是否有可能超過一定的時間treshold fot該方法返回一些特定的字符串?設置在java中的方法的運行時間限制
8
A
回答
14
Guava library有一個非常好的TimeLimiter
,它可以讓你在接口定義的任何方法上做到這一點。它可以爲具有「內置」超時的對象生成代理。
9
我在過去用Runtime.getRuntime().exec(command)
產生外部進程時做了類似的事情。我想你可以在你的方法中做這樣的事情:
Timer timer = new Timer(true);
InterruptTimerTask interruptTimerTask =
new InterruptTimerTask(Thread.currentThread());
timer.schedule(interruptTimerTask, waitTimeout);
try {
// put here the portion of code that may take more than "waitTimeout"
} catch (InterruptedException e) {
log.error("timeout exeeded);
} finally {
timer.cancel();
}
,這裏是InterruptTimerTask
/*
* A TimerTask that interrupts the specified thread when run.
*/
protected class InterruptTimerTask extends TimerTask {
private Thread theTread;
public InterruptTimerTask(Thread theTread) {
this.theTread = theTread;
}
@Override
public void run() {
theTread.interrupt();
}
}
1
作爲回答的@MarcoS
我發現超時不提高,如果方法是鎖定的東西而不是釋放CPU時間到定時器。 然後Timer不能啓動新的線程。 因此,我立即改變了一下開始線程,睡在線程內。
InterruptTimerTaskAddDel interruptTimerTask = new InterruptTimerTaskAddDel(
Thread.currentThread(),timeout_msec);
timer.schedule(interruptTimerTask, 0);
/*
* A TimerTask that interrupts the specified thread when run.
*/
class InterruptTimerTaskAddDel extends TimerTask {
private Thread theTread;
private long timeout;
public InterruptTimerTaskAddDel(Thread theTread,long i_timeout) {
this.theTread = theTread;
timeout=i_timeout;
}
@Override
public void run() {
try {
Thread.currentThread().sleep(timeout);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace(System.err);
}
theTread.interrupt();
}
}
1
您可以使用AOP和jcabi-aspects一個@Timeable
註釋(我是一個開發者):
@Timeable(limit = 1, unit = TimeUnit.SECONDS)
String load(String resource) {
while (true) {
if (Thread.currentThread.isInterrupted()) {
throw new IllegalStateException("time out");
}
// execution as usual
}
}
當達到時間限制你的線程會得到interrupted()
標誌設置爲true
和你的工作正確處理這種情況並停止執行。
此外,檢查這個博客帖子:http://www.yegor256.com/2014/06/20/limit-method-execution-time.html
相關問題
- 1. 限制在java中的方法的執行時間
- 2. 設置方法運行一段時間?
- 3. 如何設置在java中執行一些方法的時間?
- 4. 如何設置運行Ruby代碼的時間限制
- 5. python設置while循環的運行時間限制
- 6. 在遊戲中設置時間限制
- 7. 如何在用戶設置的時間運行一個方法?
- 8. 在SICStus Prolog中限制運行時間
- 9. Java中數組的運行時間。Java中的排序方法
- 10. 如何設置在node.js中運行異步函數的時間限制?
- 11. 可運行時間限制
- 12. java中Runnable線程的設置時間限制?
- 13. PHP設置時間限制等待運行腳本
- 14. 如何設置解析時間限制在java中
- 15. 通過shell_exec設置java代碼執行時間限制
- 16. 設置oracle查詢的時間限制
- 17. 設置子進程的時間限制
- 18. 如何設置file_get_contents()的時間限制?
- 19. 限制查詢基於在運行時設置列表的列
- 20. 在Java中設置持續時間的適當方法
- 21. 單聲道運行時間的限制
- 22. 在Java中的特定時間運行程序或方法
- 23. 在python中設置()運行時間
- 24. 執行Java函數的時間限制
- 25. 在java中設置的時間間隔
- 26. 是否存在運行時間限制?
- 27. python threading.timer設置時間限制當程序運行時間不夠
- 28. 運行時間380,無法設置Listproperty
- 29. 如何在php中設置不同的超時時間限制?
- 30. 如何在Ruby/Rails/Passenger/Nginx中設置執行時間限制?
你想要啥子是打電話給你的方法,如果其執行時間超過一定量的返回字符串是一個常數? – reef 2011-03-09 08:47:39
@reef nop,當返回一些字符串的方法x達到6秒運行時,它返回一些錯誤字符串..或者只是有一些我可以用來處理時間錯誤的回調。 – London 2011-03-09 08:49:50