wake-up-neo.com

was ist der Unterschied zwischen der Schlafmethode und der Ertragsmethode von Multi-Threading?

Wenn der Thread gerade ausgeführt wird, während er auf den Aufruf [sleep][1](); stößt, wechselt der Thread sofort in den Ruhezustand Dabei wechselt der Thread wie für [yield][2](); in den Status lauffähig/bereit 

46
Ajay Takur

sleep() bewirkt, dass der Thread die Ausführung für eine bestimmte Zeit definitiv stoppt; Wenn kein anderer Thread oder Prozess ausgeführt werden muss, befindet sich die CPU im Leerlauf (und wechselt möglicherweise in einen Energiesparmodus).

yield() bedeutet im Grunde, dass der Thread keine besonders wichtigen Aktionen ausführt. Wenn andere Threads oder Prozesse ausgeführt werden müssen, sollten sie dies tun. Andernfalls läuft der aktuelle Thread weiter.

86

Wir können die Ausführung eines Threads verhindern, indem wir eine der drei Methoden der Thread-Klasse verwenden:

  1. yield()
  2. join()
  3. sleep()
  1. Die Methode yield() hält den aktuell ausgeführten Thread vorübergehend an, damit die verbleibenden wartenden Threads mit derselben Priorität ausgeführt werden können. Wenn es keinen wartenden Thread gibt oder alle wartenden Threads eine niedrigere Priorität haben, setzt derselbe Thread seine Ausführung fort. Der Thread, für den die Möglichkeit zur Ausführung besteht, wird vom Thread-Scheduler festgelegt, dessen Verhalten vom Hersteller abhängt.

  2. join() Wenn ein ausführender Thread t1 join() auf t2 aufruft, d.h. t2.join() t1 wechselt sofort in den Wartezustand, bis t2 seine Ausführung beendet hat.

  3. sleep() Basierend auf unserer Anforderung können wir einen Thread für einen bestimmten Zeitraum in den Ruhezustand versetzen (wir hoffen, dass für unsere bevorzugte Methode nicht viel Erklärung erforderlich ist).

124

sleep () bewirkt, dass der aktuell ausgeführte Thread in den Ruhezustand versetzt wird (die Ausführung wird vorübergehend unterbrochen).

Yield () bewirkt, dass das derzeit ausgeführte Thread-Objekt vorübergehend angehalten wird und die Ausführung anderer Threads zulässt. 

enter image description here

Lesen Sie this für eine gute Erklärung des Themas.

29
Kazekage Gaara

Yield: bewirkt, dass der Thread auf den aktuell ausgeführten Thread wartet, und der Thread, der yield () aufgerufen hat, fügt sich am Ende der Thread-Ausführung an. Der Thread, der yield () aufruft, ist bis zu seinem Zug im blockierten Zustand.

Ruhemodus: Der Thread wird für die in Argumenten angegebene Zeitspanne im Ruhemodus schlafen. 

Join: t1 und t2 sind zwei Threads, t2.join () wird aufgerufen, dann geht t1 in den Wartezustand, bis t2 die Ausführung beendet. Dann wird t1 in einen lauffähigen Zustand versetzt, dann wählt unser spezialisierter JVM-Thread-Scheduler t1 anhand von Kriterien aus. 

5
Preetham

Durch den Ruhezustand wird der Thread für x Millisekunden in den Ruhezustand versetzt, während Yield den Thread unterbricht und sofort in die Bereitschaftswarteschlange (die Warteschlange, die die CPU zum Ausführen von Threads verwendet) versetzt. 

4
giorashc

Yield (): Die Methode stoppt den aktuell ausgeführten Thread und gibt einem anderen Thread derselben Priorität, der in der Warteschlange wartet, eine Chance. Wenn es sich nicht um einen Thread handelt, wird der aktuelle Thread weiterhin ausgeführt. Die CPU wird niemals im idealen Zustand sein .

Sleep (): Die Methode stoppt den Thread für eine bestimmte Zeit (die Zeit wird in Millisekunden angegeben). Wenn dies ein einzelner Thread ist, der läuft, befindet sich die CPU im idealen Zustand in diesem Zeitraum.

Beide sind statisches Mental.

1
Sumit Singh

Yield : Es ist ein Hinweis (nicht garantiert) an den Scheduler, dass Sie genug getan haben und dass möglicherweise ein anderer Thread mit derselben Priorität ausgeführt wird und die CPU verwendet.

Thread.sleep();

sleep : Es blockiert die Ausführung dieses bestimmten Threads für eine bestimmte Zeit.

TimeUnit.MILLISECONDS.sleep(1000);
1
Prashant_M

sleep () bewirkt, dass der Thread für eine bestimmte Zeit definitiv die Ausführung beendet; Wenn kein anderer Thread oder Prozess ausgeführt werden muss, befindet sich die CPU im Leerlauf (und befindet sich wahrscheinlich in einem Energiesparmodus) . Flood () bedeutet im Wesentlichen, dass der Thread keine besonders wichtigen Aktionen ausführt und ob andere Threads oder Prozesse müssen ausgeführt werden, sollten sie. Andernfalls läuft der aktuelle Thread weiter.

0
Sai Sunder

flood (): Die Flood-Methode wird verwendet, um die Ausführung des aktuell laufenden Prozesses anzuhalten, sodass andere wartende Threads mit derselben Priorität die CPU zur Ausführung bringen. Threads mit niedrigerer Priorität werden bei Flows nicht ausgeführt. Wenn kein wartender Thread vorhanden ist, beginnt dieser Thread mit der Ausführung.

join (): Die join-Methode stoppt derzeit die Ausführung des Threads und wartet, bis ein anderer ausgeführt wird. In aufrufenden Methoden wird die join-Methode danach erneut ausgeführt.

Für detaillierte Erklärungen siehe diesen Link .

0
Pankaj Goyal

Eine Möglichkeit, den aktuellen Thread zur Freigabe der CPU anzufordern, damit andere Threads die Möglichkeit zur Ausführung erhalten, besteht in der Verwendung von yield in Java.

yield ist eine statische Methode . Es sagt nicht aus, welcher andere Thread die CPU bekommt Es ist möglich, dass derselbe Thread die CPU zurückholt und ihre Ausführung erneut startet.

public class Solution9  {

public static void main(String[] args) {
        yclass yy = new yclass ();
        Thread t1= new Thread(yy);
        t1.start();
        for (int i = 0; i <3; i++) {
            Thread.yield();
            System.out.println("during yield control => " + Thread.currentThread().getName());
        }
    }
}

class yclass implements Runnable{

    @Override
    public void run() {
        for (int i = 0; i < 3; i++) {
            System.out.println("control => " + Thread.currentThread().getName());
        }
    }
}
0
Soudipta Dutta