Javaでは、テキストファイルを特定の方法で処理する機能があります。ただし、処理に時間がかかりすぎると、そのテキストファイルのプロセスが無駄になる可能性が高くなります(理由は何であれ)。スキップします。さらに、処理に時間がかかり過ぎると、あまりにも多くのメモリが使用されます。私はこの方法でそれを解決しようとしたが、それは動作しません:docs
はちょうどList
ディレクトリ内のファイルである長すぎると機能をスキップする
for (int i = 0; i<docs.size(); i++){
try{
docs.get(i).getAnaphora();
}
catch (Exception e){
System.err.println(e);
}
}
。通常、私は手動でコードを停止する必要があります。なぜなら、特定のファイル(そのファイルの内容に応じて)に「固まっている」ためです。
その関数呼び出しの時間を測定し、Javaに関数が10秒以上かかるファイルをスキップするように指示する方法はありますか?
EDIT
一緒に、いくつかの異なる答えを掻き落とした後、私は正常に動作します。このソリューションを思い付きました。多分誰かがこのアイデアを使うことができます。
まずRunable(必要な場合は、スレッドへの引数に渡すことができますこの方法)を実装するクラスを作成します。
public class CustomRunnable implements Runnable {
Object argument;
public CustomRunnable (Object argument){
this.argument = argument;
}
@Override
public void run() {
argument.doFunction();
}
}
次に、関数の時間を監視するmain
クラスでこのコードを使用します(argument.doFunction()
それは長いにかかる場合)とexit:
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 –
これは私が私の解決策を実現する助け、感謝:) – Tim