Java には、特定の方法でテキスト ファイルを処理する関数があります。ただし、時間がかかりすぎると、そのテキスト ファイルのプロセスは (理由が何であれ) 役に立たない可能性が高く、スキップしたいと思います。さらに、プロセスに時間がかかりすぎると、メモリも大量に使用されます。この方法で解決しようとしましたが、うまくいきません:
for (int i = 0; i<docs.size(); i++){
try{
docs.get(i).getAnaphora();
}
catch (Exception e){
System.err.println(e);
}
}
ディレクトリ内のファイルの場所docs
です。List
通常、コードは特定のファイルで「スタック」しているため (そのファイルの内容によって異なります)、手動でコードを停止する必要があります。
その関数呼び出しの時間を測定し、関数が 10 秒以上かかるファイルをスキップするように Java に指示する方法はありますか?
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()
かかりすぎる場合は終了します。
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()
ましたが、スレッドを停止したいときにスレッドを停止して終了する他の方法を見つけていません。