JavaRush /Java Blog /Random-JA /レベル 25. レベルのトピックに関するインタビューの質問への回答
zor07
レベル 31
Санкт-Петербург

レベル 25. レベルのトピックに関するインタビューの質問への回答

Random-JA グループに公開済み
レベル 25. レベル - 1 のトピックに関するインタビューの質問への回答
  1. オブジェクトのすべての状態は何ですかThread?

    • 新しい
    • 実行可能
    • ブロックされました
    • 待っている
    • TIMED_WAITING
    • 終了しました
  2. スレッドがブロックに入るときに移行できる状態は何ですかsynchronized?

    • 実行可能
    • ブロックされました

    RUNNABLE では、マークされたコードのブロックがsynchronized別のスレッドによって占有されていない場合。それ以外の場合、スレッドは BLOCKED 状態を受け取り、ミューテックス オブジェクトが解放されるのを待ちます。

  3. メソッドを呼び出すとスレッドはどの状態になりますかwait()?

    このメソッドを呼び出すと、スレッドは WAITING 状態になります。
    このメソッドは、現在のスレッドによって「ロック」されているミューテックス オブジェクトのwait()ブロック内でのみ呼び出すことができますsynchronized。それ以外の場合、メソッドはIllegalMonitorStateException例外をスローします。

    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()すべてのスレッドが「残ります」。すべての「スリープ」(待機) スレッドの 1 つが RUNNABLE 状態になり、使用されているオブジェクトのモニターを引き継ぎ、その作業を続行します。残りは BLOCKED 状態になります。最初の「ウェイクアップ」スレッドが他の全員が待機しているモニターを解放するとすぐに、その運命は次のスレッドによって繰り返されます (任意のスレッドが BLOCKED 状態から RUNNABLE 状態に移行します)。これは、すべての「目覚めた」スレッドが BLOCKED 状態を解除するまで続きます。

  6. 同期ブロック内の 3 つのスレッドは、wait()ミューテックス オブジェクトと呼ばれます。4 番目のスレッドが呼び出した場合、これらのスレッドはどのような状態になりますかnotifyAll()?

    そのうち 2 つは BLOCKED 状態になり、1 つは 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