[Java] Führen Sie einen bestimmten Prozess in einem anderen Thread mit Executor Service aus. [Endlosschleife vermeiden]

Einführung

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.

Stichprobe

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

abschließend

Generieren Sie keine Endlosschleife

Recommended Posts

[Java] Führen Sie einen bestimmten Prozess in einem anderen Thread mit Executor Service aus. [Endlosschleife vermeiden]
Ich kann in IntelliJ keine Java-Klasse mit einem bestimmten Namen erstellen
Thread-sicherer Prozess in Java-Sprache
Teilen Sie eine Zeichenfolge in Java mit ". (Dot)"
Lesen Sie eine Zeichenfolge in einer PDF-Datei mit Java
Erstellen Sie eine CSR mit erweiterten Informationen in Java
Lassen Sie uns mit Javas Timer einen zeitgesteuerten Prozess erstellen! !!
Implementieren Sie Singleton mit Enum schnell in Java
Ausgabe true mit if (a == 1 && a == 2 && a == 3) in Java (Invisible Identifier)
Verwenden Sie java1.7 (zulu7) in einem bestimmten Verzeichnis mit jenv
Ich schreibe einen Prozess, der sich in einer Listenschleife in Java (bei der Arbeit) ständig vergrößert (Liste). "