Implementieren Sie Multithreading, indem Sie die Thead-Klasse erben:
Vorteile: Einfach zu schreiben. Wenn Sie auf den aktuellen Thread zugreifen müssen, verwenden Sie einfach diese anstelle der Methode Thead.currentThread().
Nachteil: Da diese Thread-Klasse die Thead-Klasse geerbt hat, kann sie keine anderen Klassen erben.
Beispielcode:
Kopieren Sie den Codecode wie folgt:
Paket org.frzh.thread;
Die öffentliche Klasse FirstThread erweitert Thread{
private int i;
// Die Ausführungsmethode neu schreiben. Der Methodenkörper der Ausführungsmethode ist der Thread-Ausführungskörper.
public void run() {
für (; i < 100; i++) {
// Wenn die Thread-Klasse die Thread-Klasse erbt, können Sie die getName-Methode direkt aufrufen, um den aktuellen Thread-Namen abzurufen.
//Wenn Sie den aktuellen Thread abrufen möchten, verwenden Sie diesen direkt
//Die getName-Methode des Thread-Objekts gibt den Namen des aktuellen Threads zurück
System.out.println(getName() + " " + i);
}
}
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
//Rufen Sie die currentThread-Methode von Thead auf, um den aktuellen Thread abzurufen
System.out.println(Thread.currentThread().getName() + " " +i);
if (i == 20) {
new FirstThread().start();
new FirstThread().start();
}
}
}
}
Ausführendes Ergebnis-Snippet:
Wir haben festgestellt, dass die Werte von i in den beiden Unterthreads nicht kontinuierlich sind, was im Widerspruch zu dem zu stehen scheint, was wir über die direkte gemeinsame Nutzung von Daten durch die Unterthreads gesagt haben. Tatsächlich instanziieren wir hier zwei Unterthreads, jeder mit seiner eigenen Instanzvariablen i.
Verwenden von Multithreading, das die Runable-Schnittstelle implementiert:
Vorteile: Die Thread-Klasse implementiert nur die Runable-Schnittstelle und kann daher auch andere Klassen erben.
In diesem Fall können mehrere Threads ein Zielobjekt gemeinsam nutzen, daher ist es sehr gut geeignet, dass mehrere Threads dieselbe Ressource verarbeiten, sodass CPU, Code und Daten getrennt werden können, um ein klares Modell und eine bessere objektorientierte Denkweise zu bilden .
Nachteile: Die Programmierung ist etwas kompliziert. Wenn Sie auf den aktuellen Thread zugreifen möchten, müssen Sie die Methode Thread.currentThread verwenden.
Beispielcode:
Kopieren Sie den Codecode wie folgt:
Paket org.frzh.thread;
Die öffentliche Klasse SecondThread implementiert Runnable{
private int i;
@Override
public void run() {
// TODO Automatisch generierter Methoden-Stub
für (; i < 100; i++) {
System.out.println(Thread.currentThread().getName() + " " + i);
}
}
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
System.out.println(Thread.currentThread().getName() + " " + i);
if (i == 20) {
SecondThread st = new SecondThread();
new Thread(st, "child thread 1").start();
new Thread(st, "child thread 2").start();
}
}
}
}
Ausführendes Ergebnis-Snippet:
Es ist ersichtlich, dass sich der i-Wert zu diesem Zeitpunkt kontinuierlich ändert, da die Threads 1 und 2 dasselbe Ziel haben.