Der in diesem Kapitel verbundene Inhalt umfasst:
1. Einführung in Rendite ()
2. Beispiel () Beispiel
3. Vergleich zwischen Rendite () und Wait ()
1. Einführung in Rendite ()
Der Zweck von Rendite () besteht darin, nachzugeben. Es ermöglicht dem aktuellen Thread den "Ready State" aus dem "Laufstatus", so dass andere Wartedhreads mit der gleichen Priorität die Ausführungsrechte erhalten können. Habe die gleiche Priorität.
2. Beispiel () Beispiel
Im Folgenden finden Sie die Verwendung nach Beispiel.
Die Codekopie lautet wie folgt:
// renditeTest.java Quellcode
Klasse Threada erweitert Thread {
public threada (String name) {
Super (Name);
}
public synchronisierte void run () {
für (int i = 0; i <10; i ++) {
System.out.printf ("%s [%d]:%d/n", this.getName (), this.getPriority (), i);
// Wenn ich 4 teilniere, rufen Sie Rendite an
if (i%4 == 0)
Thread.yield ();
}
}
}
öffentliche Klasse RenditeTest {
public static void main (String [] args) {
Threada t1 = neuer Threada ("T1");
Threada t2 = new threada ("t2");
t1.start ();
t2.Start ();
}
}
(Einmal) Betriebsergebnis:
Die Codekopie lautet wie folgt:
T1 [5]: 0
T2 [5]: 0
T1 [5]: 1
T1 [5]: 2
T1 [5]: 3
T1 [5]: 4
T1 [5]: 5
T1 [5]: 6
T1 [5]: 7
T1 [5]: 8
T1 [5]: 9
T2 [5]: 1
T2 [5]: 2
T2 [5]: 3
T2 [5]: 4
T2 [5]: 5
T2 [5]: 6
T2 [5]: 7
T2 [5]: 8
T2 [5]: 9
Ergebnisse Beschreibung:
Wenn "Thread T1" von 4 integriert werden kann, wechselt es nicht auf "Thread T2". Dies zeigt, dass Rendite () die Threads von "laufender Zustand" eingeben können. Auch wenn diese "anderen Threads" die gleiche Priorität haben wie der Thread, der derzeit Rendite () aufruft.
3. Vergleich zwischen Rendite () und Wait ()
Wir wissen, dass die Funktion von Wait () darin besteht, dass der aktuelle Thread den "Waiting (Blocking) Status aus dem" Laufstatus "eingeben und auch die Synchronisationsschloss freigeben lässt. Die Funktion von Rendite () besteht darin, nachzugeben, wodurch auch der aktuelle Thread den "Laufstatus" verlässt. Ihre Unterschiede sind:
(01) Wait () soll den Thread den "laufenden Zustand" eingeben lassen, während nicht Rendite () den Thread den "Ready State" aus dem "Laufstatus" eingeben lässt.
(02) Wait () ist ein Synchronisationsschloss, das das von ihm gehaltene Objekt freisetzt, während die Methode reliefs () die Sperre nicht freigibt.
Das folgende Beispiel zeigt, dass Rendite () das Schloss nicht freigibt.
Die Codekopie lautet wie folgt:
// relektslocktest.java Quellcode
öffentliche Klassenrendite RenditeLockTest {
privates statisches Objekt obj = neues Objekt ();
public static void main (String [] args) {
Threada t1 = neuer Threada ("T1");
Threada t2 = new threada ("t2");
t1.start ();
t2.Start ();
}
Statische Klasse Threada erweitert Thread {
public threada (String name) {
Super (Name);
}
public void run () {
// Holen Sie sich die Synchronisationsschloss des OBJ -Objekts
synchronisiert (obj) {
für (int i = 0; i <10; i ++) {
System.out.printf ("%s [%d]:%d/n", this.getName (), this.getPriority (), i);
// Wenn ich 4 teilniere, rufen Sie Rendite an
if (i%4 == 0)
Thread.yield ();
}
}
}
}
}
(Einmal) Ergebnis:
Die Codekopie lautet wie folgt:
T1 [5]: 0
T1 [5]: 1
T1 [5]: 2
T1 [5]: 3
T1 [5]: 4
T1 [5]: 5
T1 [5]: 6
T1 [5]: 7
T1 [5]: 8
T1 [5]: 9
T2 [5]: 0
T2 [5]: 1
T2 [5]: 2
T2 [5]: 3
T2 [5]: 4
T2 [5]: 5
T2 [5]: 6
T2 [5]: 7
T2 [5]: 8
T2 [5]: 9
Ergebnisse Beschreibung:
Zwei Threads T1 und T2 werden in der Hauptfaden -Haupthauptung gestartet. T1 und T2 beziehen sich auf die Synchronisationsschloss desselben Objekts in Run (), dh synchronisiert (OBJ). Während der T1 -Operation wird Thread () aufgerufen. Weil T1 das "Synchronous Lock von Obj gehalten" nicht freigibt!