JavaRush /Java-Blog /Random-DE /Kaffeepause Nr. 159. Lebenszyklus eines Threads in Java. ...

Kaffeepause Nr. 159. Lebenszyklus eines Threads in Java. Funktionale Schnittstellen und Standardmethoden in Java 8

Veröffentlicht in der Gruppe Random-DE

Lebenszyklus eines Threads in Java

Quelle: Medium In diesem Artikel werden die verschiedenen Lebenszykluszustände von Threads in Java erläutert. Kaffeepause Nr. 159.  Lebenszyklus eines Threads in Java.  Funktionale Schnittstellen und Standardmethoden in Java 8 - 1Der Lebenszyklus eines Threads in Java besteht hauptsächlich aus Übergängen in verschiedene Zustände, beginnend mit der Thread-Geburt und endend mit der Thread-Beendigung. Ein Thread ist zur Ausführung bereit, wenn er erstellt und durch Aufrufen der start()- Methode der Thread- Klasse gestartet wird . Wenn die Methode „sleep()“ oder „wait()“ der Thread-Klasse aufgerufen wird , wird der Thread unbrauchbar. Um Threads programmgesteuert zu verwalten, ist es wichtig, den Status des Threads zu identifizieren. Lassen Sie uns verstehen, wie der Lebenszyklus eines Java-Threads seinen Status bestimmt. Folgendes sagt die Java-Dokumentation dazu: Ein Thread ist ein Programmausführungspfad, der während seines Lebenszyklus einen von fünf Zuständen einnehmen kann:
  1. Neu
  2. Lauffähig
  3. Läuft
  4. verstopft
  5. Tot
1. Neu (neugeborener Zustand) tritt auf, wenn Sie ein Thread-Objekt in der Thread-Klasse erstellen. Der Fluss ist erstellt und befindet sich in einem „neugeborenen“ Zustand. Das heißt, wenn ein Thread erstellt wird, tritt er in einen neuen Zustand ein, aber die start()- Methode wurde für die Instanz noch nicht aufgerufen. 2. Lauffähig. Dieser Zustand bedeutet, dass der Thread zur Ausführung bereit ist. Wenn die start()- Methode für einen neuen Thread aufgerufen wird, ist dieser startbereit. In diesem Zustand wartet der Thread, bis der Prozessor verfügbar wird (CPU-Zeit). Das heißt, der Thread wird zu einer Warteschlange (Reihe) von Threads, die darauf warten, ausgeführt zu werden. 3. Laufen (Laufzustand). „Ausführen“ bedeutet, dass der Prozessor dem Thread einen Zeitschlitz zur Ausführung zugewiesen hat. Dies ist der Zustand, in dem der Thread seine eigentliche Funktion ausführt. 4. Blockiert (blockierter Zustand). Ein Thread befindet sich in einem blockierten Zustand, wenn er pausiert, schläft oder einige Zeit darauf wartet, eine bestimmte Bedingung zu erfüllen. 5. Toter Zustand. Dieser Zustand tritt auf, wenn die run()- Methode die Ausführung von Anweisungen beendet. Der Thread stoppt automatisch oder geht in den Dead State. Mit anderen Worten: Wenn ein Thread die run()- Methode verlässt , wird er entweder beendet oder ist tot.

Funktionale Schnittstellen und Standardmethoden in Java 8

Quelle: Medium In diesem Artikel erfahren Sie mehr über einige der in Java 8 eingeführten Änderungen, nämlich funktionale Schnittstellen und Standardmethoden.

Was sind Standardmethoden?

Wir wissen, dass abstrakte Klassen abstrakte und nicht abstrakte Methoden (implementierte Methoden) haben können, Schnittstellen jedoch zu 100 % abstrakt sind (alle diese Methoden haben nur eine Signatur und keine Implementierung). Was aber, wenn wir statt einer Klasse eine Schnittstelle und eine gemeinsame Funktionalität aller implementierten Klassen benötigen? Denn dann wird der Implementierungscode in jeder Klasse, die die Schnittstelle implementiert, immer wieder wiederholt. Um dies zu vermeiden, hat Java 8 das Standardschlüsselwort hinzugefügt . Wenn wir eine Methode haben, die in einer Schnittstelle implementiert ist, muss dieser Methode das Standardschlüsselwort zugewiesen werden, andernfalls erhalten wir einen Laufzeitfehler.

Was ist eine funktionale Schnittstelle?

Funktionale Schnittstellen sind nichts anderes als Schnittstellen mit einer abstrakten Methode und beliebig vielen Standard- oder statischen Methoden. Ein Beispiel für eine funktionale Schnittstelle ist Comparable, die über eine abstrakte Methode verfügt, CompareTo() . Runnable verfügt wiederum über eine run()- Methode und so weiter. Wir können eine funktionale Schnittstelle auch mithilfe der Annotation @FunctionalInterface darstellen. Es stellt sicher, dass eine Schnittstelle nur eine abstrakte Methode hat:
@FunctionalInterface
public interface MyfunctionalInterface{
   public void myabstractmethod();
   public static void method1(){
       //Имплементация
    }
   public default void method2(){
       //Имплементация
    }
}

Arten von Funktionsschnittstellen

Consumer – akzeptiert ein Argument und gibt nichts zurück.
  • Die drei Varianten von Consumer sind DoubleConsumer, IntConsumer und LongConsumer (abhängig von der Art der akzeptierten Argumente).
  • Bi-Consumer – akzeptiert zwei Argumente und gibt nichts zurück.
Prädikat – akzeptiert ein Argument und gibt einen booleschen Wert zurück.
  • Die drei Varianten von Predicate sind DoublePredicate, IntPredicate und LongPredicate (abhängig von der Art der akzeptierten Argumente).
  • Bi-Prädikat – akzeptiert zwei Argumente und gibt einen booleschen Wert zurück.
Funktion – akzeptiert ein Argument und gibt einen Wert zurück.
  • Viele Versionen von Funktionen stehen als Argumenttypen zur Verfügung, wobei int , long und double am häufigsten verwendet werden.
  • Bi-Funktion – akzeptiert zwei Argumente und gibt einen Wert zurück.
  • Die unären und binären Operatoren implementieren jeweils eine Funktion und eine Bi-Funktion. Die zusätzliche Bedingung hierbei ist jedoch, dass Eingabe und Ausgabe identisch und vom gleichen Typ sein müssen.
Lieferant – Akzeptiert keine Eingaben, gibt aber einen einzelnen Wert zurück. Verschiedene Versionen von Supplier: BooleanSupplier, IntSupplier, LongSupplier und DoubleSupplier, für die Rückgabetypen die entsprechenden Grundelemente sind.
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION