Multithreaded passend zur [Java] Vorlage

Einführung

Verwenden Sie Multithreading für eine ähnliche zeitaufwändige Verarbeitung, z. B. Stapelverarbeitung. Es gibt Zeiten, in denen Sie Zeit sparen möchten.

Zum Beispiel, um zu vereinfachen und zu denken Betrachten Sie die Verarbeitung von 10 Dingen, die 5 Minuten pro Prozess dauern. Ein Thread dauert 5 * 10 = 50 Minuten, Ich habe das Gefühl, dass 10 Threads in 5 Minuten fertig sind.

In einem solchen Fall ist das Schreiben mit thread-sicherer Verarbeitung Es ist ein ziemlicher Schmerz. Ab dem nächsten Mal, um die psychische Belastung in ähnlichen Situationen zu verringern Ich habe es geschrieben, weil ich so etwas wie eine Form schaffen wollte.

Implementierungsbeispiel

Derzeit ist dies ein grobes Framework, mit dem Sie threadsicher schreiben können. Ich werde alles weglassen, außer den Informationen, die ich will Wenn Sie Ihre eigene notwendige Verarbeitung einbetten, Ich stelle mir eine "Form" vor, die fertig zu sein scheint.

MultiThreadExecute.java


/**
*Multithread-Klasse
*Erstellen Sie hier einen Thread und führen Sie ihn aus
*/
public class MultiThreadExecute {
	public static void main(String[] args) {
		MultiThreadExecute logic = new MultiThreadExecute();
		int status = logic.run();
	}

	/**Anzahl der erstellten Threads*/
	private static const THREAD_COUNT = 5;
	
	protected int run() {
	
		//Erfassung der zu verarbeitenden Daten
		int dataSize = ...(Kürzung)...;
		
		//Parallele Ausführungsverarbeitung
		//Erhöhen Sie den Bereich um die Anzahl der Threads, um die Terminierungsverarbeitung einzuschließen
		final BlockingQueue<DataDto> taskQueue =
            new LinkedBlockingQueue<DataDto>(dataSize + THREAD_COUNT);
            
		//Zur Warteschlange hinzufügen
		for (DataDto data : (Kürzung. Komm von irgendwoher)) {
			taskQueue.add(data);
		}
		
		final OnExecListener listener = new OnExecListener();
		final ExecutorService executor = Executors.newFixedThreadPool(THREAD_COUNT);
        for (int i = 0; i < THREAD_COUNT; i++) {
            //Stellen Sie sicher, dass Sie das Ende kennen
            taskQueue.add(Legen Sie ein leeres DataDto usw.);

            //Ausführung von untergeordneten Threads
            final LogicTask task = new LogicTask(taskQueue, listener);
            executor.execute(task);
        }

		//Warten Sie, bis der Thread beendet ist
        executor.shutdown();
        while (!executor.awaitTermination(5, TimeUnit.SECONDS)) {
        }
		
		//Erhalten Sie die Anzahl der Verarbeitung usw. wie folgt
		// listener.getTotalCount()
	}
}

DataDto.java


public class DataDto {
	//Speichert die Argumente, die zur Verarbeitung übergeben werden sollen
}

Listener.java


/**
 *Verarbeitungsendeerkennung
 */
private static interface Listener {
	/**
	*Entwerfen und erstellen Sie die gewünschten Informationen nach der Verarbeitung
	*Indem Sie die Schnittstelle genau definieren,
	*Reagieren Sie flexibel auf die gewünschten Informationen
	*/
	void execute();
}

OnExecListener.java


/**
 *Ende der Verarbeitung des Listeners
 */
private static class OnExecListener implements Listener {

	private int totalCount = 0;

    @Override
    public void execute(){
        synchronized (this) {
            totalCount++;
        }
    }

    synchronized int getTotalCount() {
        return totalCount;
    }
}

LogicTask.java


private static class LogicTask implements Runnable {
	private final BlockingQueue<DataDto> taskQueue;
	private final Listener listener;
	
	/**
	*Konstrukteur
	*/
	LogicTask(BlockingQueue<DataDto> taskQueue, Listener listener) {
		this.taskQueue = taskQueue;
		this.listener = listener;
	}

	/**
	*Eine Aufgabe ausführen
	*/
	@Override
	public void run() {
		try {
		    while (true) {
		        if (Urteil beenden) {
		            break;
		        }
		        
		        final DataDto data = taskQueue.take();
		        
		        //Führen Sie eine zeitaufwändige Verarbeitung durch
		        exec(data);
		    }
		} catch (//Kürzung) {
		    //Kürzung
		}
	}
	
	private void exec(DataDto data){
		//Kürzung
		return;
	}
}

Was ich dachte

Recommended Posts

Multithreaded passend zur [Java] Vorlage
Wie man JAVA in 7 Tagen lernt
Protokollausgabe in Datei in Java
Wie verwende ich Klassen in Java?
So benennen Sie Variablen in Java
Versuchen Sie, Yuma in Java zu implementieren
So verketten Sie Zeichenfolgen mit Java
So implementieren Sie die Datumsberechnung in Java
So implementieren Sie den Kalman-Filter mit Java
Mehrsprachige Unterstützung für Java Verwendung des Gebietsschemas
Versuchen Sie, Project Euler in Java zu lösen
Einfach, Slack Bot mit Java zu machen
Versuchen Sie, n-ary Addition in Java zu implementieren
So führen Sie eine Basiskonvertierung in Java durch
Ändern Sie die Liste <Optional <T >> in Java in Optional <Liste <T >>
Konvertieren Sie SVG-Dateien in Java in PNG-Dateien
So erzwingen Sie Codierungskonventionen in Java
Einbetten von Janus Graph in Java
So erhalten Sie das Datum mit Java
Fügen Sie Word-Dokumenten in Java Fußnoten hinzu
[Java Bronze] 5 Probleme zu beachten
Beispiel zum Entpacken einer gz-Datei in Java
Von Java nach C und von C nach Java in Android Studio
Fügen Sie dem Cookie in Java das SameSite-Attribut hinzu
Partisierung in Java
Änderungen in Java 11
Janken in Java
[Java] .gitignore-Vorlage
[Java] Einführung in Java
Einführung in Java
Umfangsrate in Java
FizzBuzz in Java
Zwei Möglichkeiten, einen Thread in Java + @ zu starten
Ich möchte eine E-Mail in Java senden.
So zeigen Sie eine Webseite in Java an
CORBA scheint in Java SE 11 entfernt zu sein. .. ..
Code zum Escapezeichen von JSON-Zeichenfolgen in Java
Versuchen Sie, ein Bulletin Board in Java zu erstellen
So erhalten Sie eine Klasse von Element in Java
Es scheint kein anderes zu geben - wenn in Java
Ich wollte (a == 1 && a == 2 && a == 3) in Java wahr machen
rsync4j - Ich möchte rsync in Java berühren.
So verbergen Sie Nullfelder als Antwort in Java
Bibliothek "OSHI" zum Erfassen von Systeminformationen mit Java
Ich habe versucht, neunundneunzig in Java auszugeben
So lösen Sie Ausdrucksprobleme in Java
Ich habe versucht, Alexa-Fähigkeiten mit Java zu erstellen
Wie schreibe ich Java String # getBytes in Kotlin?
Punkte, die bei Java beachtet werden müssen, sind gleich
Lesen Sie JSON in Java
Interpreter-Implementierung durch Java
Machen Sie einen Blackjack mit Java
Aufrufen von Funktionen in großen Mengen mit Java Reflection
So erstellen Sie eine Java-Umgebung in nur 3 Sekunden
Janken App in Java
[Java] So lassen Sie den privaten Konstruktor in Lombok weg
Einschränkungsprogrammierung in Java
Beispielcode zum Konvertieren von List in List <String> in Java Stream