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
Antwort
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.
Okk Was passiert, wenn ich die Synchronisation verwende? es wird immer noch erlauben, den Thread auszuführen? – ustaad
Synchronisierter Block wird verwendet, um den Zugriff auf bestimmte Ressourcen/Objekte auf einen einzelnen Thread zu blockieren –
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. –
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.
- 1. Java-Methoden laufen in Threads
- 2. Rückgabewerte von zwei lange laufenden Methoden, mit Threads
- 3. Aufrufe von Methoden in Haupt-Thread von anderen Threads
- 4. Verschiedene Methoden zum Aufrufen der Schlafmethode in Threads
- 5. Anwendungs-Threads vs. Service-Threads
- 6. Threads von Java-Programm
- 7. Methoden nicht
- 8. Sind Servlet-Threads und Connector-Threads gleich?
- 9. POSIX-Threads und Beenden eines Threads
- 10. C# -Threads - Nachrichten zwischen Threads posten
- 11. Unterscheiden zwischen Java-Threads und OS-Threads?
- 12. decaf threads vs. boost threads vs omnithreads
- 13. Ruby Threads mit Watir
- 14. Hibernate Sitzung in Threads
- 15. Asynchrone Methoden in RubyCocoa
- 16. Threads Execution
- 17. Threads synchronisiert
- 18. wxHTTP & Threads
- 19. Java-Threads
- 20. C# Brechen größer Verfahren in zwei Threads
- 21. So erstellen Sie Threads in nodejs
- 22. Kann man warten, bis Methoden, die nicht in Threads enthalten sind, in Java enden?
- 23. Inkrement und Dekrement im Programm mit zwei Threads in Java durch synchronisierte Blöcke und Methoden
- 24. Erstellen eines Proxy-Objekts zum asynchronen Aufrufen von Methoden des Ziels (Aufteilen von Logik-/Render-Threads)
- 25. Wie mit Java-Threads umgehen
- 26. Web Parser mit mehreren Threads
- 27. Synchronisierte Methoden in C#
- 28. Nicht kommunizierende Threads
- 29. Aufruf accept() von mehreren Threads
- 30. C++ Sperre über Methoden
Sie sollten eine einzelne Frage in einer Stackoverflow-Frage stellen. –
okkie Ich werde es in einer anderen Frage fragen – ustaad
Die Antwort wäre ziemlich klar, wenn Sie es wagen würden, in die Dokumentation zu schauen. – Tom