Heim  >  Artikel  >  Java  >  Memo für Anfänger zum Erlernen von Java (3)

Memo für Anfänger zum Erlernen von Java (3)

黄舟
黄舟Original
2016-12-20 13:47:551064Durchsuche

Heute habe ich begonnen, die Implementierung von Multithreading in Java zu lernen

Threads sind Codes, die parallel und unabhängig ausgeführt werden können. Die Programme, die ich zuvor geschrieben habe, konnten nur eines Es gab nur einen Thread. Multithread-Programmierung bedeutet, dass Programmaufgaben in mehrere parallele Unteraufgaben unterteilt werden können, die gleichzeitig ausgeführt werden können, ohne dass sie sich gegenseitig stören. In Kampfspielen gibt es zwei Die Leute kämpfen sich durch zwei Threads, um es umzusetzen. Wie können Sie sonst Ihre Tricks verwenden?

(18. Januar) Mir ist plötzlich eine Frage eingefallen, die ich hinzufügen möchte Was wir normalerweise nennen: „Was ist mit Multitasking?“ Mein Verständnis ist, dass Sie dies nicht sagen können, oder Sie können dies sagen.
Einfach ausgedrückt bietet Multithreading einen Mechanismus für die parallele Planung mehrerer Threads innerhalb eines Prozesses, während Multitasking einen Mechanismus dafür bereitstellt Ausführen mehrerer Prozesse innerhalb eines Betriebssystems.
Das Grundprinzip eines Multitasking-Betriebssystems (wie Windows) ist folgendes: Das Betriebssystem weist die CPU-Zeitscheibe mehreren Threads zu, und jeder Thread wird im Betriebssystem angegeben Innerhalb der Zeitscheibe abgeschlossen (beachten Sie, dass die mehreren Threads hier zu unterschiedlichen Prozessen gehören). Aus der Makroperspektive scheint dies der Fall zu sein Da diese mehreren Threads zu verschiedenen Prozessen gehören, scheint es, dass mehrere Prozesse gleichzeitig ausgeführt werden, wodurch Multitasking erreicht wird.
Wie oben Klarer Unterschied zwischen Multi-Threading und Multi-Tasking. Aber denken Sie noch einmal darüber nach: Ist die Implementierung von Multi-Threading in einer Anwendung nicht auch darauf angewiesen, dass die CPU Zeitscheiben zuweist? Da das Prinzip dasselbe ist, kann Multi-Threading auch so sein soll Multithreading sein.

Nachdem ein Java-Programm gestartet wurde, läuft bereits ein Thread. Anhand des folgenden Beispiels können wir zunächst den tatsächlichen Eindruck eines Threads ermitteln

class testthread{
public static void main(String args[]){
Thread t=Thread.currentThread();
t.setName("This Thread is running");
System.out .PRintln("The running thehead :"+t);
try{
for(int i=0;i<5;i++)
{
System.out.println("Sleep time "+i);
Thread.sleep(1000);//Einen Thread anzuhalten bedeutet, den Thread eine Weile ruhen zu lassen, ohne Systemressourcen zu belegen, sodass andere Threads fortfahren können. Der Thread hier ist standardmäßig der Hauptthread
}
}catch(InterruptedException e){System.out.println("thread has failed");}
}
}

Dies ist nur ein Thread. Wie implementieren wir also mehrere? Threads? Und wie lassen wir es die Threads tun? body.
Es gibt eine Thread-Klasse in Java. Diese Klasse enthält eine Funktion run(), die die vom Thread auszuführenden Vorgänge genau wie die Hauptfunktion main() aufzeichnet. ) Die Ausführung der Funktion endet, indem wir diese Klasse fortsetzen. Unser eigener Thread teilt ihm mit, was in der Ausführungsfunktion zu tun ist. Das folgende Programm setzt eine SimpleThread-Klasse fort und verwendet zwei Threads, um HelloWorld auszugeben.

public class TwoThread{

public static void main(String args[]){
new SimpleThread("HelloWorld1").start();//Erstellen Sie zwei Thread-Instanzen, so einfach ist das
new SimpleThread("HelloWorld2").start ();
}

}
class SimpleThread erweitert Thread{ file://Der eigentliche Inhalt ist hier
public SimpleThread(String str) {
super(str);/ /super stellt die direkte übergeordnete Klasse der SimpleThread-Klasse dar, hier ist Thread
}

file://Alles, was der Thread tun soll, ist hier
public void run(){
for (int i=0;i<10;i++){
System.out.println(i+" "+getName());
try{
sleep((int)(Math.random() *1000));
}catch(InterruptedException e){}
}
System.out.println("Done!"+getName());
🎜>🎜>
Das Ergebnis der Operation ist, dass die beiden Threads abwechselnd zehnmal ihre jeweilige HelloWorld anzeigen und die Ausgabe gemischt ist, da die beiden Threads gleichzeitig ausgeführt werden

Die zweite Methode besteht darin, den Thread-Körper über die Startschnittstelle zu erstellen. In jeder Klasse, die die Startschnittstelle implementiert, wie z. B. der Twothread-Klasse unten, kann Multithreading lediglich implementiert werden Funktion zur Definition dieser Klasse. Die Routine lautet wie folgt:

class TwoThread implementiert Runnable{
TwoThread(){
Thread t1=Thread.currentThread();
t1.setName( "Der erste Hauptthread");
System.out.println("The running thehead: "+t1);
Thread t2=new Thread(this,"the second thread");//Achten Sie auf Dies bedeutet hier, dass die Aktion des neuen Threads t2 durch dieses Objekt bestimmt wird. Das heißt, es wird durch die Ausführungsfunktion von twothread
System.out.println("create another thread");t2.start();//Der Aufruf dieser Funktion führt dazu, dass der Thread mit der Ausführung über die Ausführungsfunktion beginnt
try{
System.out.println("first thread will sleep");
Thread .sleep(3000);
}catch(InterruptedException e){System.out.println("erster Thread hat einen Fehler gemacht");}
System.out.println("erster Thread-Exit");
}

public void run()//Definieren Sie die run()-Funktion, die in diesem Programm t2 ist. Was dieser neue Thread tun wird
{
versuchen{
for(int i=0;i<5;i++)
{
System.out.println("sleep time for thread 2:"+i);
Thread.sleep(1000);
}
}catch(InterruptedException e){System.out.println("Thread hat einen Fehler gemacht");}
System.out.println("Second Thread Exit");
}
public static void main(String args[]){
new TwoThread();//Trigger-Konstruktor
}
}

Das laufende Ergebnis ist wie folgt:
Der laufende rhread: Thread [Der erste Hauptthread,5,main]
einen anderen Thread erstellen
erster Thread wird schlafen
Ruhezeit für Thread 2:0
Ruhezeit für Thread 2:1
Ruhezeit für Thread 2:2
erster Thread-Ausgang
Ruhezeit für Thread 2:3
Ruhezeit für Thread 2:4
zweiter Thread-Ausgang

Bullshit über andere Dinge Uns ist aufgefallen Viele Java-Programme haben am Anfang Importanweisungen, die den #include- und Delphi-Anwendungen von C sehr ähnlich zu sein scheinen. Import ist das Schlüsselwort von Java und für die Übertragung in das Paket verantwortlich wird zur Verwaltung großer Namen verwendet, ein Tool zur Vermeidung von Namenskonflikten.
Java stellt viele Pakete zur Verfügung, hauptsächlich wie folgt:

java.applet
Design-Applet-Klasse

java.awt
Window-Toolkit, einschließlich Klassen, die GUI-Elemente generieren

java.io
Dateieingabe- und -ausgabeklassen

java.lang
Java-Sprachklassen , einschließlich: Objekte, Threads, Ausnahmeausgang, System, Ganzzahl, Ursprung, Zahl, Zeichen usw.

java.net
Socket-Klasse und TCP/IP-bezogene Klassen

Java. util
Einige Programme Synchronisationsklasse

...

Ich habe mir am Abend kurz das Konzept der Java-Klassen als Grundelement der objektorientierten Programmierung angesehen ​​​​Klassen sind in Java wichtiger als in C++, das immer noch mit prozeduralen Sprachen kompatibel ist. Java-Programme verfügen beispielsweise nur über Klassen, die vollständig objektorientiert sind. Beispielsweise ist die Zeichenfolge „Hallo“ auch ein Objekt. und wir können „Hello“.equalsIgnoreCase () aufrufen, um festzustellen, ob das Hauptprogramm Main, das wir normalerweise in C sehen, in eine Klasse in Java gekapselt und über die Klasse The basic referenziert werden muss Eigenschaften von

-Klassen sind in Java nichts anderes als Überladung, Fortsetzung und Polymorphismus. Überladung bezieht sich auf das Erstellen von Mitgliedsfunktionen mit demselben Namen und unterschiedlichen Parametern, was bedeutet, dass Variablen und Mitgliedsfunktionen horizontal geerbt werden Vorfahrenklassen, die vertikal sind. Im Allgemeinen können Instanzvariablen bei der Ausführung des Programms je nach Bedarf als Instanzen der übergeordneten Klasse oder als Instanzen der Unterklasse angezeigt werden Je mehr Anregungen Sie zu diesen Dingen haben, desto besser erinnern Sie sich daran, damit es nicht so ist wie beim letzten Mal, als ich mich für eine Stelle beworben habe. Der Prüfer fragte mich, was die Eigenschaften von Objektorientierung seien Ich konnte sie nicht alle beantworten.

Der Inhalt von Javas Memo (3) ist auf der PHP-Chinese-Website (www.php.cn) aufgeführt mehr verwandte Inhalte!

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