1. Definieren Sie eine Klasse, die die Thread-Klasse erbt, die Ausführungsmethode in der Klasse überschreibt, die Startmethode des Klassenobjekts aufruft, die Startmethode den Thread startet und die Ausführungsmethode aufruft. Die Thread-Klasse wird zum Beschreiben von Threads verwendet. Diese Klasse definiert einen Funktionslauf, der zum Speichern des vom Thread auszuführenden Codes verwendet wird.
2. Definieren Sie eine Klasse zum Implementieren der Runnable-Schnittstelle, überschreiben Sie die Methoden in der Runnable-Schnittstelle, erstellen Sie ein Thread-Objekt über die Thread-Klasse, übergeben Sie das Unterklassenobjekt der Runnable-Schnittstelle als tatsächlichen Parameter an den Konstruktor der Thread-Klasse und rufen Sie ihn auf Die Startmethode der Thread-Klasse wird zum Starten des Threads aufgerufen. Die Ausführungsmethode in der Unterklasse der Runnable-Schnittstelle wird aufgerufen.
Durch die Implementierung der Schnittstelle Runnable werden die durch die Einzelvererbung verursachten Einschränkungen vermieden.
Gewinde T;
T.setMaemon(true);//Legen Sie den Thread als Hintergrundthread fest; der Hintergrundthread endet automatisch, wenn alle Vordergrundthreads enden;
T.notify();//Diesen Thread aufwecken;
T.notifyAll();//Alle Threads aufwecken;
T.interrupt();//Thread unterbrechen;
Thread.sleep(100);//Den Thread für 100 Millisekunden anhalten
synchronisiert: Standardmäßig sperrt es sich selbst, und benutzerdefinierte Objekte können ebenfalls gesperrt werden.
Es müssen zwei oder mehr Threads ausgeführt werden. Es muss sichergestellt werden, dass während des Synchronisierungsprozesses nur ein Thread ausgeführt wird.
Bestimmen Sie die Synchronisierung: Klären Sie, welche Codes eine Multithread-Ausführung erfordern, klären Sie gemeinsam genutzte Daten und klären Sie, welche Anweisungen im Multi-Thread-Laufcode für gemeinsam genutzte Daten verwendet werden.
Klasse Tickets implementiert Runnable
{
privater int tick = 100;
public void run() { // öffentlicher synchronisierter void run()
while (tick > 0) {
synchronisiert (dies) {
if (Häkchen > 0) {
versuchen {
Thread.sleep(100);
} Catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(this.toString() + „sale:“ + tick--);
}
}
}
}
Wie oben: Um Ticks zu betreiben, müssen die Tickets selbst synchronisiert werden.
Warte-Weckmechanismus: Beim Betrieb von Synchronisationsthreads müssen sie die Sperren identifizieren, die von den Threads, die sie betreiben, gehalten werden. Nur die wartenden Threads auf derselben Sperre können durch Benachrichtigung auf derselben Sperre aktiviert werden. Der Thread wird nicht aktiviert ; (das heißt: Warten und Aufwachen müssen dasselbe Schloss sein)