


Interviewer: K?nnten Sie mir bitte die Unterschiede zwischen Sleep(), Wait(), Join() und Yield() erkl?ren?
Mar 01, 2021 am 10:18 AMLassen Sie uns zun?chst die Konzepte des Lock-Pools und des Wartepools vorstellen.
Schauen wir uns zun?chst das Konzept des Sperrpools an.
Alle Threads, die um Synchronisierungssperren konkurrieren müssen, werden in den Sperrpool eingefügt. Beispielsweise wurde die Sperre des aktuellen Objekts von einem der Threads und einem anderen erhalten Threads müssen in diesem Sperrpool warten. Nachdem der Thread unten die Synchronisierungssperre freigegeben hat, konkurrieren die Threads im Sperrpool um die Synchronisierungssperre. Wenn ein Thread diese erh?lt, tritt er in die Bereitschaftswarteschlange ein und wartet auf die Zuweisung von CPU-Ressourcen.
Werfen wir einen Blick auf das Konzept des Wartepools
Wenn wir die Methode wait() aufrufen, wird der Thread im Wartepool platziert und die im Pool wartenden Threads konkurrieren nicht um Synchronisationssperren. Erst nach dem Aufruf von notify() oder notifyAll() beginnen die Threads im Wartepool, um die Sperre zu konkurrieren. notify() w?hlt zuf?llig einen Thread aus dem Wartepool aus und fügt ihn in den Sperrpool ein, w?hrend notifyAll() alle Threads einfügt im Wartepool Legen Sie es in den Sperrpool.
sleep ist eine statische lokale Methode der Thread-Klasse und wait ist eine lokale Methode von Object.
Die Schlafmethode gibt die Sperre nicht frei, aber das Warten gibt sie frei und fügt sie der Warteschlange hinzu.
sleep就是把cpu的執(zhí)行資格和執(zhí)行權(quán)釋放出去,不再運行此線程,當(dāng)定時事件結(jié)束再取回cpu資源,參與cpu的調(diào)度,獲取到cpu資源后就可以繼續(xù)運行了,而如果sleep時該線程有鎖,那么sleep不會釋放這個鎖,而是把鎖帶著進入了凍結(jié)狀態(tài),也就是說其它需要這個鎖的線程根本不可能獲取到這個鎖。也就是說無法執(zhí)行程序,如果在睡眠期間其它線程調(diào)用了這個線程的interrupt方法,那么這個線程也會拋出interruptexception異常返回,這點和wait是一樣的。
Die Schlafmethode h?ngt nicht vom synchronisierten Synchronisierer ab, aber warten muss vom synchronisierten Schlüsselwort abh?ngen.
Schlaf muss nicht geweckt werden (beendet die Funktion nach dem Schlafen und wird blockiert), Warten jedoch schon (es muss nicht zu einer bestimmten Zeit von anderen unterbrochen werden).
sleep wird im Allgemeinen zum Ruhen des aktuellen Threads oder zum Abfragen und Anhalten von Vorg?ngen verwendet, w?hrend wait haupts?chlich für die Kommunikation zwischen mehreren Threads verwendet wird.
sleep gibt CPU-Ausführungszeit auf und erzwingt einen Kontextwechsel, aber warten wird dies nicht unbedingt tun. Nach dem Warten besteht m?glicherweise immer noch die M?glichkeit, erneut um die Sperre zu konkurrieren und die Ausführung fortzusetzen.
yield() Nach der Ausführung wechselt der Thread direkt in den Bereitschaftszustand und gibt sofort das Ausführungsrecht der CPU frei, beh?lt aber weiterhin die Ausführungsqualifikation der CPU bei, sodass es m?glich ist, dass die CPU beim n?chsten Mal eine Thread-Planung durchführt , erh?lt dieser Thread das Ausführungsrecht.
(Lernvideo-Sharing: Java-Video-Tutorial)
Nachdem join() ausgeführt wurde, wechselt der Thread in den Blockierungsstatus. Wenn beispielsweise join() von Thread A in Thread B aufgerufen wird, tritt Thread B in den Blockierungsstatus ein Warteschlange und Leitfaden A. Beenden oder unterbrechen Sie den Thread.
public static void main(String[] args) throws InterruptedException { Thread t1=new Thread(()->{ try { Thread.sleep(4000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("休眠sleep線程"); }); t1.start(); t1.join(); System.out.println("線程執(zhí)行完成"); }
Originallink: https://blog.csdn.net/lxn1023143182/article/details/114134498
Verwandte Empfehlungen: Fragen und Antworten zu Java-Interviews
Das obige ist der detaillierte Inhalt vonInterviewer: K?nnten Sie mir bitte die Unterschiede zwischen Sleep(), Wait(), Join() und Yield() erkl?ren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Hei?e KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?er Artikel

Hei?e Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Hei?e Themen

Die Auswahl eines Docker-Images für Node mag trivial erscheinen, aber die Gr??e und potenziellen Schwachstellen des Images k?nnen erhebliche Auswirkungen auf Ihren CI/CD-Prozess und Ihre Sicherheit haben. Wie w?hlen wir also das beste Node.js-Docker-Image aus?

Dom?nenübergreifend ist ein Szenario, das in der Entwicklung h?ufig vorkommt und auch ein h?ufig in Interviews diskutiertes Thema ist. Die Beherrschung g?ngiger dom?nenübergreifender L?sungen und der dahinter stehenden Prinzipien kann nicht nur unsere Entwicklungseffizienz verbessern, sondern auch in Vorstellungsgespr?chen bessere Leistungen erbringen.

Das JS-Singleton-Muster ist ein h?ufig verwendetes Entwurfsmuster, das sicherstellt, dass eine Klasse nur eine Instanz hat. Dieser Modus wird haupts?chlich zur Verwaltung globaler Variablen verwendet, um Namenskonflikte und wiederholtes Laden zu vermeiden. Au?erdem kann er die Speichernutzung reduzieren und die Wartbarkeit und Skalierbarkeit des Codes verbessern.

Das Go-Framework besteht aus einer Reihe von Komponenten, die die integrierten Bibliotheken von Go erweitern und vorgefertigte Funktionen bereitstellen (z. B. Webentwicklung und Datenbankoperationen). Zu den beliebten Go-Frameworks geh?ren Gin (Webentwicklung), GORM (Datenbankoperationen) und RESTful (API-Verwaltung). Middleware ist ein Interceptor-Muster in der HTTP-Anforderungsverarbeitungskette und wird verwendet, um Funktionen wie Authentifizierung oder Anforderungsprotokollierung hinzuzufügen, ohne den Handler zu ?ndern. Die Sitzungsverwaltung verwaltet den Sitzungsstatus durch die Speicherung von Benutzerdaten. Sie k?nnen gorilla/sessions zum Verwalten von Sitzungen verwenden.

Was ist JPA? Wie unterscheidet es sich von JDBC? JPA (JavaPersistence API) ist eine Standardschnittstelle für objektrelationales Mapping (ORM), die es Java-Entwicklern erm?glicht, vertraute Java-Objekte zum Betreiben von Datenbanken zu verwenden, ohne SQL-Abfragen direkt in die Datenbank schreiben zu müssen. JDBC (JavaDatabaseConnectivity) ist die Standard-API von Java für die Verbindung mit Datenbanken. Sie erfordert, dass Entwickler SQL-Anweisungen verwenden, um die Datenbank zu betreiben. JPA kapselt JDBC, bietet eine bequemere und übergeordnete API für die objektrelationale Zuordnung und vereinfacht Datenzugriffsvorg?nge. Was ist in JPA eine Entit?t? juristische Person

Wie bestimmt JavaScript den Datentyp? In diesem Artikel werden 8 M?glichkeiten zur Verwendung von JS zur Bestimmung des Datentyps vorgestellt, die die Arbeit und Interviews effektiv unterstützen k?nnen. Der Interviewer l?chelte leicht, nachdem er ihn gelesen hatte.

Das URL-Modul und das Querystring-Modul sind zwei sehr wichtige URL-Verarbeitungsmodule. Es wird h?ufig bei der Entwicklung von Knotenservern verwendet.

In diesem Artikel werden 100 h?ufig gestellte PHP-Interviewfragen (mit gemeinsamen Antworten) zusammengestellt und geteilt, um Ihnen dabei zu helfen, Grundkenntnisse zu erwerben und Ihren PHP-Wissensvorrat zu erweitern. Es hat einen gewissen Referenzwert. Freunde in Not k?nnen sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.
