2016-07-20 4 views
-3

Kürzlich hatte ich ein Java-Interview. eine der Fragen war Angenommen, es gibt zwei Threads und ein Thread wird für immer ausgeführt, Wie können wir den anderen Thread in dieser Situation ausführen? durch anruf join() oder ertrag() methode?Threads Methoden

+0

Sie sollten eine einzelne Frage in einer Stackoverflow-Frage stellen. –

+0

okkie Ich werde es in einer anderen Frage fragen – ustaad

+0

Die Antwort wäre ziemlich klar, wenn Sie es wagen würden, in die Dokumentation zu schauen. – Tom

Antwort

0

join() wird auf die Ausführung des angegebenen Threads warten, so dass Sie für immer auf den ersten Thread warten werden. yield():

ein Hinweis an den Scheduler, der den aktuellen Thread bereit ist, seine aktuelle Verwendung eines Prozessors zu ergeben.

So könnten Sie Yield() im ersten Thread verwenden, aber es ist nicht notwendig, Threads werden gleichzeitig ausgeführt.

+0

Okk Was passiert, wenn ich die Synchronisation verwende? es wird immer noch erlauben, den Thread auszuführen? – ustaad

+0

Synchronisierter Block wird verwendet, um den Zugriff auf bestimmte Ressourcen/Objekte auf einen einzelnen Thread zu blockieren –

+0

Sie sollten nicht an 'Thread.yield()' als "Anhalten" des aufrufenden Threads denken. Das letzte javadoc für 'Thread.yield()' sagt, dass es "A _hint_ für den Scheduler ist, dass der aktuelle Thread bereit ist, seinen aktuellen Gebrauch eines Prozessors zu liefern. _Der Scheduler kann diesen Hinweis ignorieren._" (Hervorhebung mine.) 'Thread.yield()' ist wirklich ein Anachronismus, der für die Verwendung in einer JVM gedacht ist, die auf einer Single-CPU unter einem _cooperativen Multitasking-Betriebssystem läuft. –

0

Wie können wir den anderen Thread in dieser Situation ausführen?

Die Frage ist sehr schlecht angegeben. Wir führen keine Threads: Threads führen unsere Code.

Wenn diese beiden Threads beide auf meinem Laptop start() ed sind, und Thread A für immer ausgeführt wird, und ich Thread B auch ausführen möchte, dann muss ich gar nichts tun. Das Betriebssystem stellt sicher, dass beide Threads ausgeführt werden. Und wenn es keine anderen Programme gibt, die versuchen, gleichzeitig zu arbeiten, wird jeder Thread ungefähr 100% einer der acht CPUs meines Laptops bekommen.