在Java中我有一個功能,以某種方式處理文本文件。但是,如果該過程花費太多時間,那麼對於該文本文件而言,該過程很可能是無用的(無論原因是什麼),我想跳過它。此外,如果過程耗時過長,它也會佔用太多內存。我已經試過這種方式來解決它,但它不工作:跳過功能,如果它需要太長時間
for (int i = 0; i<docs.size(); i++){
try{
docs.get(i).getAnaphora();
}
catch (Exception e){
System.err.println(e);
}
}
其中docs
只是一個目錄中的文件的List
。通常我必須手動停止代碼,因爲它被「卡住」在一個特定的文件上(取決於該文件的內容)。
是否有一種測量該函數調用時間的方法,並告訴Java跳過該函數花費的時間超過了比方說10秒?
編輯
刮幾下不同的答案在一起後,我想出了這個解決方案,它工作正常。也許別人也可以使用這個想法。
首先創建一個實現可運行(這樣如果需要的話,你可以在參數傳遞給Thread)類:
public class CustomRunnable implements Runnable {
Object argument;
public CustomRunnable (Object argument){
this.argument = argument;
}
@Override
public void run() {
argument.doFunction();
}
}
然後用這個代碼在main
類監控功能時(argument.doFunction()
)和出口,如果它需要長期:
Thread thread;
for (int i = 0; i<someObjectList.size(); i++){
thread = new Thread(new CustomRunnable(someObjectList.get(i)));
thread.start();
long endTimeMillis = System.currentTimeMillis() + 20000;
while (thread.isAlive()) {
if (System.currentTimeMillis() > endTimeMillis) {
thread.stop();
break;
}
try {
System.out.println("\ttimer:"+(int)(endTimeMillis - System.currentTimeMillis())/1000+"s");
thread.sleep(2000);
}
catch (InterruptedException t) {}
}
}
我意識到stop()
是depcecated,但我還沒有發現任何其他方式停止,當我希望它停止退出線程。
看看這樣: [http://stackoverflow.com/questions/8982420/time-out-method-in-java][1] [1]:http://stackoverflow.com/questions/8982420/time-out-method-in-java – 2013-04-20 14:05:43
這幫助我實現我的解決方案,謝謝:) – Tim 2013-04-20 17:14:58