Video: Christian Heitzmann - Concurrency in Java - A Tour of the Java Concurrency API 2024
Hier ist ein gut gehütetes Geheimnis: Java-Programme sind multithreaded, was bedeutet, dass mehrere Dinge gleichzeitig laufen, wenn Sie ein Java-Programm ausführen.. Sicher, der Computer führt den Code aus, den Sie geschrieben haben, aber er führt auch anderen Code aus (Code, den Sie nicht geschrieben haben und nicht sehen).
Dieser gesamte Code wird gleichzeitig ausgeführt. Während der Computer die Anweisungen Ihrer Hauptmethode nacheinander ausführt, nimmt sich der Computer eine Auszeit, verschwindet kurz und führt Anweisungen von anderen, unsichtbaren Methoden aus. Für die meisten einfachen Java-Programme sind diese anderen Methoden solche, die als Teil der Java Virtual Machine (JVM) definiert sind.
Zum Beispiel hat Java einen Event-Handling-Thread. Während der Code ausgeführt wird, wird der Code des Ereignisedokumentations-Threads im Hintergrund ausgeführt. Der Code des Ereignisbehandlungs-Threads lauscht auf Mausklicks und führt entsprechende Maßnahmen aus, wenn ein Benutzer auf die Maus klickt. Die Abbildung zeigt, wie das funktioniert.
Wenn der Benutzer auf die Schaltfläche klickt, sagt der Thread für die Ereignisbehandlung: "Okay, die Schaltfläche wurde angeklickt. Also, was soll ich tun? "Und die Antwort lautet:" Rufen Sie einige actionPerformed-Methoden auf. "Es ist, als ob der Thread für die Ereignisbehandlung Code hat, der so aussieht:
if (buttonJustGotClicked ()) {Objekt1. actionPerformed (infoAboutTheClick); Objekt2. actionPerformed (infoAboutTheClick); Objekt3. actionPerformed (infoAboutTheClick);}
Natürlich steht hinter jeder Antwort noch eine andere Frage. In dieser Situation lautet die weiterführende Frage: "Wo findet der Ereignisbehandlungsthread actionPerformed Methoden zum Aufrufen? "Und es gibt eine andere Frage:" Was ist, wenn Sie nicht möchten, dass der Thread zur Ereignisbehandlung bestimmte actionPerformed-Methoden aufruft, die in Ihrem Code lauern? "
Nun, deshalb rufen Sie die Methode addActionListener auf. In der Auflistung die Schaltfläche
. addActionListener (dies);
teilt dem Ereignisbehandlungsthread mit: "Setzen Sie die actionPerformed-Methode dieses Codes in die Liste der aufzurufenden Methoden. Rufen Sie die actionPerformed-Methode dieses Codes immer dann auf, wenn auf die Schaltfläche geklickt wird. "
Also, so funktioniert es. Damit der Computer eine actionPerformed-Methode aufruft, registrieren Sie die Methode mit dem Ereignisbehandlungsthread von Java. Sie führen diese Registrierung aus, indem Sie addActionListener aufrufen. Die addActionListener-Methode gehört zu dem Objekt, dessen Klicks (und andere Ereignisse) Sie erwarten.
In der Auflistung warten Sie darauf, dass auf das Schaltflächenobjekt geklickt wird, und die addActionListener-Methode gehört zu diesem Schaltflächenobjekt.