Il s'agit d'un exemple qui exécute un processus spécifique en Java dans un thread séparé. Lorsqu'une boucle infinie se produit dans un certain processus (lorsque le processus n'est pas terminé dans le délai spécifié), il est nécessaire d'interrompre le processus et de générer une erreur, il s'agit donc d'un mémorandum à ce moment-là.
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();
//Exécuter le traitement dans un autre thread
Future<Integer> future = exec.submit(new ExcutorSample(a, b, c));
Integer result = 0;
try{
//Attendez 10 secondes. Si le processus se termine correctement, le résultat du calcul sera renvoyé. Lancer une exception après 10 secondes
result = future.get(10, TimeUnit.SECONDS);
} catch(TimeoutException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
} finally {
//Suspendre le traitement. Ce processus est inoffensif même si le processus est terminé normalement.
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 {
//Traitement en boucle infinie intégré
boolean loopFlg = true;
while(loopFlg) {
Thread.sleep(1000);
System.out.println("En boucle");
}
return a + b + c;
}
}
}
Résultat d'exécution
En boucle
En boucle
En boucle
En boucle
En boucle
En boucle
En boucle
En boucle
En boucle
En boucle
java.util.concurrent.TimeoutException
at java.util.concurrent.FutureTask.get(FutureTask.java:205)
at main.Main.main(Main.java:24)
0
Ne générez pas de boucle infinie
Recommended Posts