Die vorherigen Blog -Beiträge haben im Grunde einige Inhalte in der Parallelität von Java zusammengefasst. Dieser Blog -Beitrag beginnt hauptsächlich mit einem Problem und sehen, welche oben zusammengefassten Parallelitätstechnologien zur Lösung verwendet werden können.
Simulieren Sie ein Szenario: Verarbeiten von 16 Protokolldatensätzen. Jede Protokolldruckendruckzeit dauert 1 Sekunde. Unter normalen Umständen dauert es 16 Sekunden, wenn diese 16 Aufzeichnungen abgeschlossen sind. Um die Effizienz zu verbessern, können wir 4 Threads zum Drucken starten und in 4 Sekunden drucken, um diese Demo zu realisieren.
Lassen Sie uns zuerst diese Frage analysieren. In Bezug auf diese 16 Protokolldatensätze können wir sie im Haupt -Thread generieren. Das ist nicht schwierig. Der Schlüssel ist, 4 Threads zum Ausführen zu starten. Es gibt jetzt zwei Ideen: Eine ist, dass die Generation von Protokollen und der Thread, der die Protokolle druckt, logisch getrennt sind; Das andere ist, dass die Erzeugung von Protokollen und der Thread, der die Protokolle druckt, logisch nicht getrennt sind. Dies kann etwas dunkel sein. Lassen Sie mich eine implementierte Demo schreiben, die auf diesen beiden Ideen basiert.
Die Protokollgenerierung und der Protokolldruck sind logisch getrennt.
Dies entspricht zwei Fronten: Eine Front erzeugt ständig Protokolle, und die andere Front druckt ständig Protokolle. Es ist offensichtlich, dass Sie sich an die Verwendung von Blockieren von Warteschlangen vorstellen und Protokolle generieren, die immer wieder in die blockierenden Warteschlangen einbinden, und Protokolle, die immer wieder von den blockierenden Warteschlangen gelangen. Die Größe der blockierenden Warteschlange kann von selbst, 16 oder 1, von sich selbst eingestellt werden, was die Ausführung nicht beeinträchtigt. Daher wird Blockingqueue verwendet. Schauen wir uns die unten implementierte Demo an:
public class praction1 {public static void main (String [] args) {// eine blockierende Warteschlange definieren, die Warteschlangengröße kann 16 Information BlockingQueue <String> Queue = NeuarrayBlockingCock <string> (16) enthalten; run () {while (true) {try {string log = queue.take (); // log parselog (log); // drucken log} catch (interruptedException e) {// toDo auto generiert catch blocke.printstacktrace ();}}}}). (System.currentTimemillis ()/1000)) für (int i = 0; i <16; i ++) {Final String log = "" +(i +1); // Geben Sie einen logarithmischen Versuch an. blocke.printstacktrace ();}}} public static void parselog (String log) {// Methode zum Drucken log system.out.println (thread.currentThread (). Zweite} catch (InterruptedException e) {// Todo automatisch generiert blocke.printstacktrace ();}}}} Dies ist so, wie ein System arbeitet, ständig Protokolle erzeugt und mehrere Threads kontinuierlich öffnet, um Protokollinformationen zu drucken. Die Demo ist geschrieben und das Betriebsergebnis wird nicht veröffentlicht.
Die Protokollgenerierung und der Protokolldruck sind nicht logisch getrennt.
Diese Idee ist, dass Sie es für mich ausdrucken und mit vier Threads zusammen ausdrucken! Wenn Sie also so denken, müssen Sie den Thread -Pool verwenden. Ich habe zuerst einen Thread -Pool erstellt, der 4 Threads enthielt, und als das Protokoll erzeugt wurde, bat ich den Thread -Pool, den Thread zu verwenden, um ihn auszuführen. Die Demo ist wie folgt:
public class praction1 {public static void main (String [] args) {ExecutorService Service = Executors.NewFixedThreadpool (4); // Erstellen Sie ein Thread -Pool -System. log Service.execute (new Runnable () {// einen Thread nehmen, um @Override public void run () {parselog (log);}});} service.shutdown (); // Vergessen Sie nicht, den Thread-Pool im Ende} öffentlicher Static Void Parselog (String Log) {system.out. + "---" + (system.currentTimemillis ()/1000)); try {thread.sleep (1000); // Simulieren Sie das Drucken eines Protokolls 1 Sekunde} catch (interruptedException e) {// todo auto-generiertes Catch Blocke.printstacktrace ();Fassen wir dieses Problem hier zusammen. Wenn Sie diese beiden Ideen verstehen, können Sie sie im Allgemeinen effektiv lösen.
Das obige ist der gesamte Inhalt dieses Artikels über Java-Programmierung eines Beispiels mit mehreren Thread-Problemen. Ich hoffe, er wird für alle hilfreich sein. Interessierte Freunde können weiterhin auf andere verwandte Themen auf dieser Website verweisen. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!