JavaRush /Java Blog /Random-KO /레벨 25. 레벨 주제에 대한 인터뷰 질문에 대한 답변
zor07
레벨 31
Санкт-Петербург

레벨 25. 레벨 주제에 대한 인터뷰 질문에 대한 답변

Random-KO 그룹에 게시되었습니다
레벨 25. 레벨-1 주제에 관한 인터뷰 질문에 대한 답변
  1. 객체의 모든 상태는 무엇입니까 Thread?

    • 새로운
    • 실행 가능
    • 막힌
    • 대기 중
    • TIMED_WAITING
    • 종료됨
  2. 블록에 들어갈 때 스레드는 어떤 상태로 갈 수 있나요 synchronized?

    • 실행 가능
    • 막힌

    RUNNABLE에서 표시된 코드 블록이 synchronized다른 스레드에 의해 점유되지 않은 경우. 그렇지 않으면 스레드는 BLOCKED 상태를 수신하고 뮤텍스 개체가 해제될 때까지 기다립니다.

  3. 메소드를 호출할 때 스레드는 어떤 상태로 이동합니까 wait()?

    이 메서드를 호출하면 스레드가 WAITING 상태가 됩니다.
    이 메소드는 현재 스레드에 의해 "잠겨진" 뮤텍스 객체의 wait()블록 내에서만 호출될 수 있습니다 . 그렇지 않으면 메소드는 IllegalMonitorStateException 예외를 발생시킵니다 .synchronized

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

    메서드가 호출되면 wait()현재 스레드는 개체에서 잠금을 해제 하고 WAITING 상태로 들어가 다른 스레드 에서 monitor해당 메서드를 호출할 때까지 기다립니다 . 이런 일이 발생하자마자 스레드가 깨어나고 모니터가 사용 중이 아니면 스레드를 잡고 작업을 계속합니다. 모니터가 다른 스레드에 의해 점유되면 현재 스레드는 BLOCKED 상태가 됩니다.monitor.notify()monitor.notifyAll()

  4. 메소드를 호출할 때 스레드는 어떤 상태로 이동합니까 wait(500)?

    이 메소드를 호출하면 스레드가 TIMED_WAITING 상태가 됩니다.
    메서드와 유사하게 wait()현재 스레드에 의해 "잠긴(잠긴)" 뮤텍스 개체의 wait(timeout)블록 내에서만 호출할 수 있습니다 .synchronized

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

    메서드를 호출하면 wait()현재 스레드는 개체에서 잠금을 해제 monitor하고 500밀리초 동안 절전 모드로 전환됩니다. 개체가 monitor다른 스레드에 의해 캡처될 수 있습니다.
    500밀리초 후에 스레드가 깨어나고, monitor사용 중이 아니면 스레드를 잡고 작업을 계속합니다.
    모니터가 다른 스레드에 의해 점유되면 현재 스레드는 BLOCKED 상태가 됩니다.

    메소드를 호출할 때 스레드는 어떤 상태로 이동합니까 notify()?

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

    이후 monitor.wait()스레드는 WAITING 상태로 전환됩니다. notify()개체의 다른 스레드에서 호출한 메서드는 monitor모니터 개체가 다른 스레드에 의해 캡처되지 않는 한 스레드를 WAITING 상태에서 RUNNABLE 상태로 이동하고, 그렇지 않으면 BLOCKED 상태로 이동합니다.

  5. 메소드를 호출할 때 스레드는 어떤 상태로 이동합니까 notifyAll()?

    notifyAll()모든 스레드가 "머물러 있을 것입니다". 모든 "휴면"(WAITING) 스레드 중 하나가 RUNNABLE 상태로 전환되어 사용 중인 개체의 모니터를 인계받아 작업을 계속합니다. 나머지는 BLOCKED 상태가 됩니다. 첫 번째 "깨어나기" 스레드가 다른 모든 사람들이 기다리고 있는 모니터를 해제하자마자 그 운명은 다음 스레드에서 반복됩니다(임의 스레드는 BLOCKED 상태에서 RUNNABLE 상태로 전환됩니다). 이는 모든 "깨어난" 스레드가 BLOCKED 상태를 벗어날 때까지 계속됩니다.

  6. wait()뮤텍스 개체 라고 하는 동기화된 블록의 세 스레드입니다 . 네 번째 스레드가 호출하면 이러한 스레드는 어떤 상태로 이동합니까 notifyAll()?

    그 중 두 개는 BLOCKED 상태가 되고, 하나는 RUNNABLE 상태가 됩니다.

  7. 와 어떻게 다른 join(500)가요 wait(500)?

    현재 스레드를 TIMED_WAITING 상태로 전환한다는 join(500)사실 에도 불구하고 둘 사이에는 상당한 차이점이 있습니다. 즉, 스레드에서 호출되고 이 블록이 동기화되는 개체의 동기화된 블록 내부에서 호출됩니다. 호출되면 현재 스레드는 메서드가 호출된 스레드가 완료될 때까지 500밀리초 동안 기다립니다. 호출되면 현재 스레드는 동기화된 개체에서 잠금을 해제하고 500밀리초 동안 절전 모드로 전환됩니다. 500밀리초 후에 두 경우 모두 스레드가 계속 작동합니다.wait(500)
    join(500)wait(500)
    join(500)join()
    wait(500)

  8. 와 어떻게 다른 wait(500)가요 sleep(500)?

    sleep(500)스레드에서 호출되며 wait(500)이 블록이 동기화되는 개체의 동기화된 블록 내부에서 호출됩니다.
    호출되면 sleep(500)현재 스레드는 500밀리초 동안 대기한 다음 작업을 계속합니다.
    호출되면 wait(500)현재 스레드는 동기화된 개체에서 잠금을 해제하고 500밀리초 동안 절전 모드로 전환됩니다.

  9. 메소드를 호출할 때 스레드는 어떤 상태로 이동합니까 yield()?

    메소드가 호출되면 yield()현재 스레드는 "차례를 건너뛰고" java는 즉시 다음 스레드 실행으로 전환합니다. 스레드는 상태에서 running상태로 이동합니다 ready. 실행 및 준비 상태는 RUNNABLE 상태의 하위 상태입니다.

PS 의견, 추가, 수정, 발언을 환영합니다 =)
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION