Dies ist ein Beispiel, das einen bestimmten Prozess in Java in einem separaten Thread ausführt. Wenn in einem bestimmten Prozess eine Endlosschleife auftritt (wenn der Prozess nicht innerhalb der angegebenen Zeit abgeschlossen ist), muss der Prozess unterbrochen und ein Fehler generiert werden, sodass es sich zu diesem Zeitpunkt um ein Memorandum handelt.
main.java
package main;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
public class Main {
public static void main(String[] args) {
int a = 1;
int b = 2;
int c = 3;
ExecutorService exec = Executors.newSingleThreadExecutor();
//Führen Sie die Verarbeitung in einem anderen Thread aus
Future<Integer> future = exec.submit(new ExcutorSample(a, b, c));
Integer result = 0;
try{
//Warten Sie 10 Sekunden. Wenn der Vorgang korrekt beendet wird, wird das Berechnungsergebnis zurückgegeben. Wirf nach 10 Sekunden eine Ausnahme aus
result = future.get(10, TimeUnit.SECONDS);
} catch(TimeoutException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
} finally {
//Verarbeitung anhalten. Dieser Vorgang ist harmlos, auch wenn der Vorgang normal abgeschlossen ist.
future.cancel(true);
}
System.out.println(result);
}
public static class ExcutorSample implements Callable<Integer>{
private int a;
private int b;
private int c;
public ExcutorSample(int a, int b, int c){
this.a = a;
this.b = b;
this.c = c;
}
@Override
public Integer call() throws Exception {
//Integrierte Endlosschleifenverarbeitung
boolean loopFlg = true;
while(loopFlg) {
Thread.sleep(1000);
System.out.println("In einer Schleife");
}
return a + b + c;
}
}
}
Ausführungsergebnis
In einer Schleife
In einer Schleife
In einer Schleife
In einer Schleife
In einer Schleife
In einer Schleife
In einer Schleife
In einer Schleife
In einer Schleife
In einer Schleife
java.util.concurrent.TimeoutException
at java.util.concurrent.FutureTask.get(FutureTask.java:205)
at main.Main.main(Main.java:24)
0
Generieren Sie keine Endlosschleife
Recommended Posts