Heim  >  Artikel  >  Java  >  Beispielcode-Sharing zweier Methoden zum Erstellen von Threads in Java

Beispielcode-Sharing zweier Methoden zum Erstellen von Threads in Java

黄舟
黄舟Original
2017-03-17 10:48:591415Durchsuche

In diesem Artikel werden hauptsächlich die beiden Methoden zum Erstellen von Threads in Java ausführlich vorgestellt. Freunde in Not können sich auf

Zwei Methoden zum Erstellen von Threads in Java

Java stellt die Thread-Klasse Thread zur Verfügung, um Multithread-Programme zu erstellen. Tatsächlich ist der Vorgang zum Erstellen eines Threads derselbe wie das Erstellen eines gewöhnlichen Klassenobjekts, und ein Thread ist ein Instanzobjekt der Thread-Klasse oder ihrer Unterklasse. Jedes Thread-Objekt beschreibt einen separaten Thread. Um einen Thread zu generieren, gibt es zwei Methoden:

◆Sie müssen eine neue Thread-Klasse von der Java.lang.Thread-Klasse ableiten und deren run()-Methode überladen ◆Implementieren Sie die Runnalbe

Schnittstelle
und überladen Sie die run()-Methode in der Runnalbe-Schnittstelle.

Warum bietet Java zwei Methoden zum Erstellen von Threads? Was sind die Unterschiede zwischen ihnen? Welche Methode ist im Vergleich besser?

In Java unterstützen Klassen nur die Einzelvererbung. Das heißt, beim Definieren einer neuen Klasse kann nur eine externe Klasse erweitert werden. Auf diese Weise wird sie implementiert, wenn Sie eine benutzerdefinierte Thread-Klasse erstellen Erweitert die Methode der Thread-Klasse, sodass diese benutzerdefinierte Klasse keine anderen Klassen erweitern und keine komplexeren Funktionen implementieren kann. Wenn eine benutzerdefinierte Klasse daher andere Klassen erweitern muss, können Sie die Methode, die die Runnable-Schnittstelle implementiert, verwenden, um die Klasse als Thread-Klasse zu definieren und so die Einschränkungen der Java-Einzelvererbung zu vermeiden. Das Wichtigste ist, dass Threads, die durch die Implementierung der Runnable-Schnittstelle erstellt wurden, dieselbe Ressource verarbeiten können, wodurch die gemeinsame Nutzung von Ressourcen realisiert wird.

(1) Durch Erweitern der Thread-Klasse können mehrere Ressourcen erstellt werden. Threads

Angenommen, ein Theater verfügt über drei Ticketverkaufsstellen, an denen Tickets an Kinder, Erwachsene und ältere Menschen verkauft werden. Das Theater verfügt über 100 Kinokarten für jedes Fenster, nämlich Kinderkarten, Erwachsenenkarten und Seniorenkarten. Drei Fenster müssen gleichzeitig Tickets verkaufen, und jetzt gibt es nur noch einen Ticketverkäufer. Dieser Ticketverkäufer entspricht einer CPU, und drei Fenster entsprechen drei Threads. Schauen wir uns an, wie diese drei Threads durch das Programm erstellt werden.

Im Programm ist eine Thread-Klasse definiert, die die Thread-Klasse erweitert. Verwenden Sie die erweiterte Thread-Klasse, um drei Thread-Objekte in der Hauptmethode der MutliThreadDemo-Klasse zu erstellen und sie jeweils über die start()-Methode zu starten.

Wie Sie aus den Ergebnissen ersehen können, entspricht jeder Thread 100 Kinokarten und es besteht keine Beziehung zwischen ihnen. Dies bedeutet, dass jeder Thread gleichwertig ist und keine Prioritätsbeziehung hat, sodass sie alle Chancen haben von der CPU verarbeitet. Die Ergebnisse zeigen jedoch, dass diese drei Threads nicht abwechselnd nacheinander ausgeführt werden. Wenn die drei Threads jedoch gleichzeitig ausgeführt werden, haben einige Threads eine größere Chance, Zeitscheiben zuzuweisen, und die Tickets sind im Voraus ausverkauft, während andere Den Threads wird Zeit zugewiesen. Es gibt weniger Gelegenheiten zum Filmen und die Tickets werden später ausverkauft sein.
public class MutliThreadDemo {
 public static void main(String [] args){
  MutliThread m1=new MutliThread("Window 1");
  MutliThread m2=new MutliThread("Window 2");
  MutliThread m3=new MutliThread("Window 3");
  m1.start();
  m2.start();
  m3.start();
 }
}
class MutliThread extends Thread{
 private int ticket=100;//每个线程都拥有100张票
 MutliThread(String name){
  super(name);//调用父类带参数的构造方法
 }
 public void run(){
  while(ticket>0){
   System.out.println(ticket--+" is saled by "+Thread.currentThread().getName());
  }
 }
}

Es ist ersichtlich, dass

mehrere Threads, die durch Erweitern der Thread-Klasse erstellt wurden, denselben Code ausführen, aber unabhängig voneinander sind und jeder über seine eigenen Ressourcen verfügt, ohne sich gegenseitig zu stören.

(2) Erstellen Sie Multithreads durch Implementierung der Runnable-Schnittstelle

Da diese drei Threads auch unabhängig voneinander sind, hat jeder seine eigene Eigenmittel sind 100 Kinokarten, daher ist die Ergebnisausgabe des Programms ähnlich dem Ergebnis (1). Jeder Thread verarbeitet seine eigenen 100 Tickets unabhängig voneinander, ohne sich gegenseitig zu beeinflussen.

Es ist ersichtlich, dass jede Methode zum Erstellen mehrerer Methoden verwendet werden kann, solange die tatsächliche Situation erfordert, dass die neuen Threads unabhängig voneinander sind, über eigene Ressourcen verfügen und sich nicht gegenseitig stören. Threads. Denn auf diese beiden Arten erstellte Multithread-Programme können dieselbe Funktion erreichen.
public class MutliThreadDemo2 {
 public static void main(String [] args){
  MutliThread m1=new MutliThread("Window 1");
  MutliThread m2=new MutliThread("Window 2");
  MutliThread m3=new MutliThread("Window 3");
  Thread t1=new Thread(m1);
  Thread t2=new Thread(m2);
  Thread t3=new Thread(m3);
  t1.start();
  t2.start();
  t3.start();
 }
}
class MutliThread implements Runnable{
 private int ticket=100;//每个线程都拥有100张票
 private String name;
 MutliThread(String name){
  this.name=name;
 }
 public void run(){
  while(ticket>0){
   System.out.println(ticket--+" is saled by "+name);
  }
 }
}

Da diese drei Threads unabhängig voneinander sind und jeder über eigene Ressourcen, nämlich 100 Kinokarten, verfügt, ähneln die vom Programm ausgegebenen Ergebnisse denen in Beispiel 4.2.1. Jeder Thread verarbeitet seine eigenen 100 Tickets unabhängig voneinander, ohne sich gegenseitig zu beeinflussen.

Es ist ersichtlich, dass jede Methode zum Erstellen mehrerer Methoden verwendet werden kann, solange die tatsächliche Situation erfordert, dass die neuen Threads unabhängig voneinander sind, über eigene Ressourcen verfügen und sich nicht gegenseitig stören. Threads. Denn auf diese beiden Arten erstellte Multithread-Programme können dieselbe Funktion erreichen.

(3) Realisieren Sie die gemeinsame Nutzung von Ressourcen zwischen Threads durch die Implementierung der Runnable-Schnittstelle.

Diese Situation besteht auch in der Realität, beispielsweise bei der Simulation des Ticketsystems eines Bahnhofs An diesem Tag werden nur 100 Bahntickets von Punkt A nach Punkt B gesendet, und alle Fenster dürfen diese 100 Tickets verkaufen. Dann entspricht jedes Fenster auch einem Thread, aber der Unterschied zum vorherigen Beispiel besteht darin, dass die gesamte Thread-Verarbeitung erfolgt Die Ressource ist dieselbe Ressource, also 100 Tickets. Wenn wir immer noch die vorherige Methode zum Erstellen von Threads verwenden, ist dies offensichtlich unmöglich. Wie gehen wir mit dieser Situation um? Schauen Sie sich das Programm unten an. Der Programmcode lautet wie folgt:

Wie oben analysiert, erstellt das Programm nur eine Ressource im Speicher und die drei neu erstellten Threads basieren alle auf dem Zugriff auf dieselbe Ressource . und da in jedem Thread derselbe Code ausgeführt wird, führen sie dieselbe Funktion aus.

Es ist ersichtlich, dass Sie ein Multithread-Programm erstellen können, indem Sie die Runnable-Schnittstelle implementieren, wenn das reale Problem die Erstellung mehrerer Threads erfordert, um dieselbe Aufgabe auszuführen, und die mehreren Threads dieselben Ressourcen gemeinsam nutzen . Diese Funktion kann nicht durch Erweitern der Thread-Klasse erreicht werden. Warum?

Die Implementierung der Runnable-Schnittstelle hat unvergleichliche Vorteile gegenüber der Erweiterung der Thread-Klasse. Diese Methode trägt nicht nur zur Robustheit des Programms bei, sodass der Code von mehreren Threads gemeinsam genutzt werden kann, sondern auch, dass die Code- und Datenressourcen relativ unabhängig sind, was besonders für Situationen geeignet ist, in denen mehrere Threads mit demselben Code dasselbe verarbeiten Ressource. Auf diese Weise werden Threads, Code und Datenressourcen effektiv getrennt, was die Idee der objektorientierten Programmierung gut widerspiegelt. Daher werden fast alle Multithread-Programme durch die Implementierung der Runnable-Schnittstelle vervollständigt.

Das obige ist der detaillierte Inhalt vonBeispielcode-Sharing zweier Methoden zum Erstellen von Threads in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn