マルチスレッドに関するインタビューの質問と回答トップ 40 (2025)

Java マルチスレッドに関する面接でよくある質問

ここでは、夢の仕事に就くための、新人だけでなく経験豊富な候補者向けのマルチスレッド面接の質問とその回答を紹介します。


1) スレッドとは何ですか?

スレッドは同時実行の単位です。 これは、プロセスの他の部分と同時に簡単に実行できるプロセスの一部であると言えます。

無料 PDF ダウンロード: マルチスレッド インタビューの質問と回答


2) マルチスレッドとは何ですか?

マルチスレッド Java では、CPU を最大限に活用するために XNUMX つ以上のスレッドを同時に実行するプロセスです。

主な利点は次のとおりです。

  • スレッドは同じアドレス空間を共有します
  • スレッドは軽量のまま
  • スレッド間の通信コストは低くなります。

3) スレッドに関連付けられている状態は何ですか?

  • レディ
  • Running:
  • 待っています
  • デッド状態

4) スレッドのライフサイクルについて話し合いますか?

スレッドのライフサイクルは、スレッドで実行されているプロセスのライフサイクルと似ています。 オペレーティングシステム。 スレッドはライフサイクル中に、ある状態から別の状態に移行することがあります。 ただし、それは実行される操作によって異なります。


5) スレッドの状態は何ですか?

さまざまなスレッドの状態を次に示します。

新機能: インスタンス化されたばかりのスレッドは新しい状態です。 start() メソッドが呼び出されると、スレッドは準備完了状態になります。 その後、スレッド スケジューラによって実行可能状態に移行します。

  • 実行可能: 実行準備ができているスレッド
  • ランニング: 実行中のスレッドは実行状態です。
  • ブロック済み: ブロックされたスレッドはモニター ロックを待機しており、この状態になります。 このことは、スレッドが I/O 操作を実行して次の状態に移行するときにも発生する可能性があります。
  • 待っている: これは、別のスレッドが特定のアクションを実行するのを待っているスレッドです。
  • 時間指定待機: 別のスレッドの実行を待っているスレッドです。
  • 終了: 終了したスレッドはこの状態になります。
マルチスレッドインタビューの質問
マルチスレッドインタビューの質問

6) スレッドとプロセスの主な違いは何ですか?

スレッドはプロセスのサブセットです。 プロセスには複数のスレッドを含めることができます。 プロセスは異なるメモリ空間で実行できますが、すべてのスレッドは同じメモリ空間を共有します。


7) デッドロックとは何ですか?

デッドロックとは、スレッドが別のスレッドによって取得されるオブジェクト ロックを待機しており、XNUMX 番目のスレッドも最初のスレッドによって取得されるオブジェクト ロックを待機している状況です。 両方のスレッドがお互いの解放を待っているため、この状態はデッドロックと呼ばれます。


8) ライブロックとは何ですか?

ライブロックは、必要なリソースが利用できないこと、およびブロックされていないスレッドが存在しないことにより、すべてのスレッドがブロックされ、実行できない場合に発生します。

ライブロックは次の状況で発生する可能性があります。

  • プログラム内のすべてのスレッドがパラメータがゼロのオブジェクトに対して実行されたとき。 プログラムはライブロックされており、XNUMX つ以上のスレッドが関連するオブジェクトに対して Object.notify () または Object.notifyAll() を呼び出すまで処理されません。
  • ライブロックは、プログラム内のすべてのスレッドが無限ループに入った場合にも発生します。
マルチスレッドインタビューの質問
マルチスレッド

9) モニターとは何ですか?

  • モニターは、一度に XNUMX つのスレッドだけが実行できるコードの本体です。
  • 他のスレッドが同時にアクセスを取得しようとすると、現在のスレッドがモニターを解放するまで保留されます。

10) スレッドの飢餓とはどういう意味ですか?

スレッドの実行に十分な CPU がない状況では、スレッドの枯渇が発生します。

ただし、次のシナリオでは発生する可能性があります

  • 優先度の低いスレッドは、優先度の高いスレッドに比べて CPU の使用量が少なくなります。 優先順位の低いスレッドは、計算を実行するためにより多くの CPU スペースを取得するのを待って枯渇する可能性があります。
  • スレッドはオブジェクトのモニターのロックを無限に待機している可能性がありますが、notify() が他のスレッドを繰り返し起動している可能性があります。 その場合、スレッドも飢えてしまいます。

11) マルチスレッドにおけるビジースピンの意味は何ですか?

ビジー スピンは、並行プログラマがスレッドを特定の条件で待機させるために採用する手法です。 これは、CPU 制御を放棄する wait() や sleep() などの従来のメソッドとはまったく異なります。 この方法では CPU を放棄する必要はなく、空のループを実行するだけです。


12) マルチスレッドにおけるコンテキスト切り替えとは何ですか?

CPU の状態を保存および復元するプロセスです。 これは、 履歴書 後の同じ時点からのスレッドの実行。 これは、マルチタスク オペレーティング システムとマルチスレッド環境のサポートに不可欠な機能の XNUMX つです。


13) スレッドの動作が予測できないのはなぜですか?

スレッドの実行はスレッド スケジューラに依存するため、スレッドの動作は予測不可能であると言えます。 すべてのスレッド スケジューラは、Windows、Unix などの異なるプラットフォーム上で異なる実装を持っていることを覚えておく必要があります。


14) スレッドの実行を一定時間一時停止するにはどうすればよいですか?

sleep() メソッドは、スレッドの実行を一定時間一時停止するために使用されます。 ただし、これによってスレッドの処理が一定時間停止されることはありません。 ただし、スレッドがスリープから目覚めると、その状態は実行可能に変わり、スレッドのスケジューリングに基づいて実行されます。


15) スレッドが待機状態に入るさまざまな方法は何ですか?

スレッドは次の方法で待機状態に入ることができます。

  • sleep() メソッドの使用
  • I/O でのブロック
  • オブジェクトのロックを取得しようとして失敗しました
  • オブジェクトの wait() メソッドを呼び出すことによって

16) run メソッドをオーバーライドしないとどうなりますか?

Java では、スレッド上で start() メソッドを呼び出すと、内部で新しく作成されたスレッドで run() メソッドが呼び出されます。 したがって、 run( ) メソッドをオーバーライドしない場合、新しく作成されたスレッドは呼び出されないため、何も起こりません。
例:

class MyThread extends Thread {

//don't override run() method

}
public class DontOverrideRun {

public static void main(String[] args) {

System.out.println("main has started.");

MyThread thread1=new MyThread();

thread1.start();

System.out.println("main has ended.");
}

}

17) Thread.start() メソッドと Thread?run() メソッドの主な違いは何ですか?

Thread クラスの Thread.start() メソッド (ネイティブ メソッド) は、スレッド内で Thread.A run() メソッドを実行するジョブを実行します。 したがって、Thread.を直接呼び出すと、 run() メソッドも同じスレッドで実行されます。 したがって、新しいスレッドを作成する目的は決して解決されません。


18) Javaでスレッドを作成するにはどうすればよいですか?

Javaでスレッドを作成するにはXNUMXつの方法があります。

  • まず Runnable インターフェイスを実装し、それからスレッド オブジェクトを作成します。
  • XNUMX 番目の方法は、スレッド クラスを拡張することです。

19) スレッド優先度の意味は何ですか?

すべてのスレッドには優先順位があります。 ただし、実行では優先度が高い方が優先されます。 ただし、OS に依存するスレッド スケジューラの実装にも依存します。 スレッドの優先順位を変更することは可能ですが、優先順位の高いスレッドが最初に実行されるという保証はありません。


20) join() メソッドは何をしますか?

join() メソッドはスレッドが終了するのを待ちます。 これにより、スレッドがジョブを完了するために参加するまで、実行中のすべてのスレッドの実行が強制的に停止されます。


21) Java シャットダウンフックとは何ですか?

Java シャットダウン フックは、JVM のシャットダウン時にリソースをクリーンアップするために使用されます。 クリーンなリソースとは、ログ ファイルを閉じる、アラートを送信するなどのことを意味します。 JVM がシャットダウンする前にコードを実行するには、シャットダウン フックを使用する必要があります。


22) Java における volatile の XNUMX つの主な用途は何ですか?

スレッドは変数の値をローカル メモリに保持できます。変数が揮発性としてマークされている場合、同じ変数が使用されるたびに、その変数をメイン メモリから読み取る必要があります。

同様に、変数が書き込まれるたびに、値をメイン メモリに保存する必要があります。


23) Java の XNUMX つのスレッド間でデータを共有するにはどうすればよいですか?

共有オブジェクトまたは同時実行を使用して、スレッド間でデータを取得できます。 データ構造 BlockingQueue のように。 wait メソッドと notification メソッドを使用して、プロデューサー/コンシューマー パターンを実装します。 また、XNUMX つのスレッド間でオブジェクトを共有することも含まれます。


24) 複数のスレッドを同時に制御するにはどうすればよいですか?

ThreadGroup オブジェクト内にスレッドを作成すると、複数のスレッドを同時に制御できます。


25) Java のブロッキング メソッドとは何ですか?

Java のブロッキングメソッドは、タスクが完了するまでブロックするメソッドです。 たとえば、ServerSocket の accept() メソッドは、クライアントが接続されるまでブロックします。 ここでのブロッキングとは、タスクが終了するまで制御が呼び出し元に返されないものを指します。


26) wait() メソッドと sleep() メソッドの主な違いは何ですか?

待って() 睡眠()
このメソッドは Object クラスで定義されます。 メソッドはThreadクラスで定義されています
Wait() メソッドはロックを解放します このメソッドではロックが解放されません。

27) 不変オブジェクトとは何ですか? 同時実行アプリケーションの作成にどのように役立ちますか?

オブジェクトの構築後に状態が変わらない場合、オブジェクトはチャレンジ不可能であると見なされます。 不変オブジェクトは、シンプルで信頼性の高い同時実行アプリケーションの作成に使用されます。

オブジェクトを不変に作成するには、クラスとそのメンバーを Final にして、オブジェクトが作成されるとその状態が変更されないようにすることが重要です。


28) 屈服することと眠ることの違いを教えてください。

タスクがその yield() メソッドを呼び出すと、準備完了状態に戻ります。

タスクが sleep() メソッドを呼び出すと、待機状態に戻ります。


29) スレッドプールとは何ですか?

ThreadPool は、特定のタスクを実行するために固定数のスレッドを再利用するスレッドのプールです。


30) 同期キーワードの用途は何ですか?

Synchronized キーワードは、静的メソッドまたは非静的メソッドのいずれかに適用できます。 Synchronized を使用すると、XNUMX つのスレッドのみが同期メソッドにアクセスできます。 ただし、同じメソッドにアクセスしようとする複数のスレッドが存在する状況では。 このとき、他のスレッドは実行スレッドを待つ必要があります。 また、競合状態を防ぐためにオブジェクトをロックします。

public void synchronized method1(){}

public void synchronized staticmethod1(){}

public void myMethod(){

synchronized (this){

//synchronized keyword on block of code

}

}

31) 揮発性キーワードとは何ですか?

Volatile キーワードは、変数の宣言時に変数に適用される修飾子です。 これは、コードによるアクションが実行されることなく、変数の値がいつでも変更される可能性があることをコンパイラーに伝えます。


32) JavaにおけるnotifyとnotifyAllの主な違いは何ですか?

Notify() メソッドには、特定のスレッドを選択する方法がありません。そのため、このメソッドは、単一の While NoticeAll() がすべてのスレッドに通知を送信する場合にのみ役立ちます。 また、ロックを奪い合うこともできます。 また、少なくとも XNUMX つのスレッドがさらに続行されることも保証されます。


33) スレッドのスタック サイズを制御するために使用される JVM パラメータはどれですか?

JavaのThreadのスタックサイズを制御するには、Xssパラメータが使用されます。


34) Java でスレッドを XNUMX 回開始できますか?

いいえ、一度スレッドを開始すると、XNUMX 回目にスレッドを開始することはできません。


35) スレッドクラスの yield メソッドを使用する目的は何ですか?

Yield メソッドは、現在のスレッドに CPU を解放して他のスレッドに解放するよう要求する最も簡単な方法です。 これは静的メソッドであり、現在のスレッドが CPU を解放することのみを保証しますが、他のどのスレッドが CPU に影響を与えるかについては何も示しません。


36) Java ではスレッドが軽量プロセスではないと言えるのはどのような場合ですか?

同じプロセスのスレッドが同時に実行されている場合、スレッドは軽量プロセスではありません。 ただし、そのときに異なるプロセスのスレッドが同時に実行されている場合、スレッドは重量のあるプロセスになります。


37) Java クラスのコンストラクターを同期することはできますか?

Java 標準として、スレッド作成プロセスが完了するまでは他のスレッドがオブジェクトを認識できないため、コンストラクターを同期することはできません。 Java オブジェクト コンストラクターは構築中のオブジェクトをロックするため、同期する必要はありません。


38) 過渡​​変数とは何ですか?

一時変数は、シリアル化中にシリアル化できない変数です。 シリアル化中にデフォルト値に初期化されます。

これらの面接の質問は、あなたの活力(口頭)にも役立ちます

シェアする

4のコメント

  1. アバター Java トレーニング 言います:

    斐伊川
    本当に助かります。 面接準備中。
    この記事を書いてこの情報を提供したことは本当に賞賛に値します。
    賞賛に値する

  2. アバター シュエタシュリー・ベンカテシュ 言います:

    5) スレッドの状態は何ですか?
    実行可能は実行状態ではありません。 実行する準備ができています

    1. アバター 管理人 言います:

      更新しました! ご指摘いただきありがとうございます

    2. アバター アムダ・アデオル・バドムス 言います:

      1.実行可能な状態は、OS レベルの二重層として表示されます。

      2.ほぼすべてのプログラミング言語は、スレッドを実行可能かどうかを判断します。

      3. 実行可能なスレッドは、(準備完了または実行中) 状態のいずれかになります。

      4. XNUMX つのスレッドが実行可能状態にある可能性がありますが、「実行中」状態にあるスレッドは XNUMX つだけです。
      一方、XNUMX 番目のスレッドは「実行中」状態にあります。

コメントを残す

あなたのメールアドレスは公開されません。 必須フィールドは、マークされています *