JavaRush /Java-Blog /Random-DE /Level 25. Antworten auf Interviewfragen zum Levelthema
zor07
Level 31
Санкт-Петербург

Level 25. Antworten auf Interviewfragen zum Levelthema

Veröffentlicht in der Gruppe Random-DE
Level 25. Antworten auf Interviewfragen zum Thema Level - 1
  1. Was sind alle Zustände des Objekts Thread?

    • NEU
    • LAUFBAR
    • VERSTOPFT
    • WARTEN
    • TIMED_WAITING
    • BEENDET
  2. In welche Zustände kann ein Thread gehen, wenn er einen Block betritt synchronized?

    • LAUFBAR
    • VERSTOPFT

    In RUNNABLE, wenn der markierte Codeblock synchronizednicht von einem anderen Thread belegt ist. Andernfalls erhält unser Thread den Status BLOCKED und wartet auf die Freigabe des Mutex-Objekts.

  3. In welchen Zustand geht der Thread, wenn er die Methode aufruft wait()?

    Durch den Aufruf dieser Methode wird der Thread in den Status WAITING versetzt.
    Die Methode wait()kann nur innerhalb eines Blocks eines Mutex-Objekts aufgerufen werden, synchronizeddas vom aktuellen Thread „gesperrt“ wurde, andernfalls löst die Methode eine IllegalMonitorStateException- Ausnahme aus .

    Object monitor = getMonitor();
    synchronized(monitor)
    {
     …
     monitor.wait();}

    Wenn eine Methode aufgerufen wird wait(), hebt der aktuelle Thread die Sperre des Objekts auf und geht in den Status WAITING über, in dem er darauf wartet, dass die Methode von einem anderen Thread monitoraufgerufen wird . Sobald dies geschieht, wird der Thread aktiviert und wenn der Monitor nicht ausgelastet war, greift er darauf zu und arbeitet weiter. Wenn der Monitor von einem anderen Thread belegt ist, wechselt der aktuelle Thread in den Status BLOCKED.monitor.notify()monitor.notifyAll()

  4. In welchen Zustand geht der Thread, wenn er die Methode aufruft wait(500)?

    Durch den Aufruf dieser Methode wird der Thread in den Status TIMED_WAITING versetzt.
    Analog zur Methode kann sie nur innerhalb eines Blocks auf einem Mutex-Objekt aufgerufen werden, wait()das vom aktuellen Thread „gesperrt (gesperrt)“ wurde.wait(timeout)synchronized

    Object monitor = getMonitor();
    synchronized(monitor)
    {
     …
     monitor.wait(500);}

    Beim Aufruf der Methode wait()hebt der aktuelle Thread die Sperre des Objekts auf monitorund geht für 500 Millisekunden in den Ruhezustand. Das Objekt monitorwurde möglicherweise von einem anderen Thread erfasst.
    Nach 500 Millisekunden wird der Thread aktiviert und wenn monitorer nicht beschäftigt war, greift er darauf zu und arbeitet weiter.
    Wenn der Monitor von einem anderen Thread belegt ist, wechselt der aktuelle Thread in den Status BLOCKED.

    In welchen Zustand geht der Thread, wenn er die Methode aufruft notify()?

    Object monitor = getMonitor();
    synchronized(monitor)
    {
     …
     monitor.wait();}

    Danach monitor.wait()wechselt der Thread in den Wartestatus. notify()Eine von einem anderen Thread für ein Objekt aufgerufene Methode monitorverschiebt den Thread vom Status WAITING in den Status RUNNABLE, es sei denn, das Monitorobjekt wird von einem anderen Thread erfasst, andernfalls in den Status BLOCKED.

  5. In welchen Zustand geht der Thread, wenn er die Methode aufruft notifyAll()?

    notifyAll()„bleiben“ alle Threads. Einer aller „schlafenden“ (WAITING) Threads geht in den RUNNABLE-Zustand über, übernimmt den Monitor des verwendeten Objekts und setzt seine Arbeit fort. Der Rest befindet sich im Status BLOCKIERT. Sobald der erste „aufwachende“ Thread den Monitor freigibt, auf den alle anderen warten, wird sein Schicksal vom nächsten Thread wiederholt (ein beliebiger Thread wechselt vom Status BLOCKED in den Status RUNNABLE). Dies wird so lange fortgesetzt, bis alle „erwachten“ Threads den BLOCKED-Zustand verlassen.

  6. Drei Threads im synchronisierten Block werden als wait()Mutex-Objekt bezeichnet. In welchen Zustand gehen diese Threads, wenn der vierte Thread aufruft notifyAll()?

    Zwei davon wechseln in den Status BLOCKED, einer in den Status RUNNABLE

  7. Wie unterscheidet es sich join(500)von wait(500)?

    Trotz der Tatsache, dass und den aktuellen Thread in den Status TIMED_WAITING join(500)überführt wait(500), gibt es erhebliche Unterschiede zwischen ihnen:
    join(500)Wird für einen Thread aufgerufen, wait(500)wird innerhalb eines synchronisierten Blocks für das Objekt aufgerufen, mit dem dieser Block synchronisiert ist.
    Beim Aufruf join(500)wartet der aktuelle Thread 500 Millisekunden auf den join()Abschluss des Threads, dessen Methode aufgerufen wurde.
    Beim Aufruf wait(500)hebt der aktuelle Thread die Sperre des synchronisierten Objekts auf und geht für 500 Millisekunden in den Ruhezustand.
    Nach 500 Millisekunden funktionieren die Threads in beiden Fällen weiter.

  8. Wie unterscheidet es sich wait(500)von sleep(500)?

    sleep(500)Wird in einem Thread aufgerufen, wait(500)wird innerhalb eines synchronisierten Blocks für das Objekt aufgerufen, auf dem dieser Block synchronisiert ist.
    Beim Aufruf sleep(500)wartet der aktuelle Thread 500 Millisekunden und setzt dann seine Arbeit fort.
    Beim Aufruf wait(500)hebt der aktuelle Thread die Sperre des synchronisierten Objekts auf und geht für 500 Millisekunden in den Ruhezustand.

  9. In welchen Zustand geht der Thread, wenn er die Methode aufruft yield()?

    Wenn eine Methode aufgerufen wird yield(), „überspringt“ der aktuelle Thread seinen Zug und Java wechselt sofort zur Ausführung des nächsten Threads. Der Thread geht von Staat runningzu Staat ready. Die Status „Laufend“ und „Bereit“ sind Unterzustände des Status „RUNNABLE“.

PS Kommentare, Ergänzungen, Korrekturen, Anmerkungen sind willkommen =)
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION