Java では、マルチスレッドには 2 つ以上のスレッドの同時実行が含まれ、システム容量に基づいて処理速度が向上します。マルチスレッドでは最小単位が同時に処理されるため、実行が高速化されます。開発者はアニメーション、ゲーム、大規模なアプリケーションの管理などのタスクにこれを使用し、メモリ空間と時間の効率化に貢献します。
Java でのマルチスレッド化に関連する仕事を探している場合は、Java でのマルチスレッド化の面接の質問に備える必要があります。実際、すべての面接は職務プロフィールに基づいて異なります。ここでは、面接での成功に役立つ、Java でのマルチスレッド面接の重要な質問とその回答を用意しました。
無料ソフトウェア開発コースを始めましょう
Web 開発、プログラミング言語、ソフトウェア テスト、その他
この記事では、Java でのマルチスレッド面接の質問に関して、最も重要でよくある質問 40 個を紹介します。
答え:
スレッドの状態は、スレッドのライフサイクルとも呼ばれます。以下はスレッドのさまざまな状態です:
答え:スレッドとは、実行にかかる時間が短い小さな単位を指します。これは主に実行パスから独立しています。これは、マシンで利用可能な複数の CPU を活用する方法の 1 つです。マルチスレッドの助けにより、CPU タスクの処理が高速化されます。 Java は主に、マルチスレッドのサポートを提供するために使用されます。 Java は、複数のプロセッサを利用してプログラムのパフォーマンスを向上させるマルチスレッドをサポートしています。スレッドを作成するには、Thread クラスを拡張するか、Runnable インターフェイスを実装する 2 つの方法があります。
答え:スレッドは、プロセス内で実行される最小のタスクです。このプロセスは、複数のスレッドを備えた自己完結型の実行環境です。スレッドはプロセスを細分化したものです。スレッドはプロセスのデータ セグメントに直接アクセスできますが、プロセスはデータ セグメントの独自のコピーを持っています。スレッドは主にプロセスによって作成されたアドレスを共有し、プロセスは独自のアドレスを持ちます。
スレッドは簡単に作成できますが、プロセスの作成には多くの作業が必要です。スレッドは他のスレッドと簡単に通信でき、プロセスは子プロセスと簡単に通信できますが、プロセス間通信は困難です。スレッドには独自のスタックがありますが、プロセスはヒープ メモリなどのメモリ リソースを共有します。スレッド内で変更が行われた場合、すべてのスレッドに影響しますが、プロセス内では他のプロセスには影響しません。
答え:これらは、面接で尋ねられる Java でのマルチスレッド面接の一般的な質問です。現在の IT 業界では、通常、マルチスレッド テスターがいくつかの責任を負う必要があります。
Java メモリ モデルは、さまざまなメモリ アーキテクチャ、CPU、オペレーティング システムにわたって一貫した動作を示すために、Java プログラムが従う必要がある特定のルール セットを確立します。これらのルールは、マルチスレッド化において重要な役割を果たします。Java メモリ モデルは、スレッドの 1 つで行われた変更を区別するのに役立ち、その変更は他のスレッドにも表示される必要があります。この MOD は、各スレッドのアクションがプログラム順序の後ろに来るすべてのスレッドより前に発生するというプログラム順序です。
Antwort:Das Schlüsselwort oder die Variable volatile stellt sicher, dass gemeinsam genutzte Variablen oder Instanzvariablen ständig aktualisiert werden, wenn mehrere Threads Änderungen vornehmen. Es handelt sich um einen speziellen Modifikator, der nur auf Instanzvariablen anwendbar ist, nicht auf Methoden. Durch die Deklaration eines Felds als flüchtig in Java wird sichergestellt, dass das Java-Speichermodell konsistente Werte für diese Variable über alle Threads hinweg garantiert. Das Programm liest den Wert der flüchtigen Variablen immer aus dem Hauptspeicher und verringert so die Wahrscheinlichkeit von Speicherkonsistenzfehlern. Darüber hinaus kann eine flüchtige Java-Variable, die eine Objektreferenz darstellt, null sein. Die Anwendung des Schlüsselworts volatile ist erforderlich, wenn eine Variable über mehrere Threads hinweg verwendet wird.
Antwort:Die Race-Bedingung tritt auf, wenn es einen Wettlauf zwischen mehreren Threads gibt. Diese Race-Bedingung wird hauptsächlich durch einige Programmierfehler oder -fehler verursacht. Der Thread, der ausgeführt werden muss, hat zunächst das Rennen verloren und dann den zweiten ausgeführt, und es kam zu einer Änderung im Verhalten des Codes, die als nicht deterministische Fehler bezeichnet wird. Aufgrund der zufälligen Natur der Threads wird es zu einem der schwierigsten Fehler, ihn herauszufinden und zu reproduzieren.
Antwort:Das Fork-Join-Framework wird in JDK7 eingeführt. Es ist ein leistungsstarkes Tool für Java-Entwickler, um die Vorteile mehrerer Prozessoren heutiger Weltserver zu nutzen. Es ist hauptsächlich für Arbeiten konzipiert, die in kleinere Teile unterteilt werden können. Das Hauptziel besteht darin, die verfügbare Rechenleistung zu nutzen, um die Anwendungsleistung zu steigern. Es wurde hauptsächlich der Work-Stealing-Algorithmus verwendet.
Antwort:Der Thread-Pool wird als Thread-Pool bezeichnet. Der Thread wird im Allgemeinen als Arbeitsthread bezeichnet. Die Erstellung eines Threads ist in vielerlei Hinsicht kostspielig, sowohl zeit- als auch ressourcenintensiv. Wenn Sie den Thread zum Zeitpunkt der Prozessanforderung erstellen, verlangsamt dies im Allgemeinen die Antwortzeit des Prozessors und die Anzahl der Threads, die erstellt werden können, ist nur begrenzt begrenzt. Aufgrund dieser beiden Hauptprobleme wurde der Thread-Pool erstellt. In Java können wir mit der Java-API verschiedene Arten von Thread-Pools erstellen, z. B. einen einzelnen Thread-Pool, der jeweils nur einen Prozess ausführt. Der andere ist ein fester Thread-Pool, der eine feste Anzahl von Threads aufnimmt. Dann gibt es einen zwischengespeicherten Thread-Pool, einen erweiterbaren Thread-Pool, der hauptsächlich für viele Aufgaben geeignet ist.
Antwort:Dies sind die beliebtesten Multithreading-Interviewfragen in Java, die in einem Interview gestellt werden. Einige beliebte Testfälle in der aktuellen IT-Branche.
Die Daten können mithilfe des gemeinsam genutzten Objekts oder einer gleichzeitigen Datenstruktur wie einer Blockierungswarteschlange zwischen Threads geteilt werden. Es folgt hauptsächlich dem Producer-Consumer-Muster und verwendet Warte- und Benachrichtigungsmethoden, die die gemeinsame Nutzung eines Objekts zwischen den beiden Threads beinhalten.
Antwort:In Java verfügt jeder Thread über einen eigenen Stapel, der zum Speichern lokaler Variablen, Methodenparameter und Aufrufstapel verwendet wird. Heap-Speicher ist ein gemeinsamer Speicher, der von allen Threads gemeinsam genutzt wird.
Antwort:
Feature | Process | Thread |
Definition | An autonomous program running. | A process’s lightweight unit. |
Execution | Operates on its own. | Operates within a process’s framework. |
Communication | Requires communication between processes. | Communication made easier and data space shared. |
Synchronization | More remote and possibly requiring more overhead. | Requires shared data synchronization mechanisms. |
Resource Overhead | Greater (differing memory spaces). | Lower (shares the process’s resources). |
Creation Time | Slower and requiring more resources. | Quicker and with less overhead needed. |
Fault Tolerance | More resilient. | Failure could impact the entire process if it is not as strong. |
Antwort:Java verwendet die Methoden notify() und notifyAll() in Verbindung mit der Methode wait(), um Synchronisation und Kommunikation zwischen Threads zu implementieren. Die Object-Klasse, die Basisklasse für alle Java-Klassen, enthält diese Methoden. Unten angegebene Syntax:
public final void wait() throws InterruptedException
Das bedeutet, dass Sie bei Verwendung von wait() entweder deklarieren sollten, dass die Methode, die wait() aufruft, diese Ausnahme auslöst, oder die InterruptedException abfangen sollten.
Antwort:Ein in Java erstellter Thread wird als Benutzer-Thread bezeichnet. Ein Daemon-Thread läuft immer im Hintergrund und sein vollständiger Lebenszyklus hängt vom Haupt-Thread ab. Ein im Hintergrund laufender Daemon-Thread verhindert nicht, dass JVM ihn beendet. Untergeordnete Threads, die aus einem Daemon-Thread erstellt wurden, sind ebenfalls Daemon-Threads.
Antwort:
Threads in Java können auf zwei Arten erstellt werden:
class MyThread extends Thread { public void run() { // Code to be executed in the new thread } } // Creating and starting the thread MyThread myThread = new MyThread(); myThread.start();
class MyRunnable implements Runnable { public void run() { // Code to be executed in the new thread } } // Creating a thread using the Runnable interface Thread myThread = new Thread(new MyRunnable()); myThread.start();
Antwort:In Vorstellungsgesprächen werden häufig Java-Interviewfragen zum Thema Multithreading gestellt. Im Folgenden ist der Lebenszyklus eines Threads aufgeführt:
Antwort:Durch den direkten Aufruf der run()-Methode wird das Programm erfolgreich kompiliert und ausgeführt, aber dasselbe Programm wird nicht als Thread behandelt, da kein neuer Aufrufstapel erstellt wird und das Programm seinen startet Ausführung im selben Aufrufstapel, in dem der Hauptaufruf ausgeführt wird.
Um einen Thread zu erstellen, der mit einem neuen Aufrufstapel ausgeführt werden soll, muss man die start()-Methode der Thread-Klasse verwenden.
Antwort:Ja, dies kann in Java erreicht werden, indem die Funktion „sleep()“ der Thread-Klasse aufgerufen wird. Die Methode „sleep()“ benötigt außerdem ein Argument, das die Zeit in Millisekunden angibt.
Antwort:Ja, Thread-Planung in Java ist möglich. Threads in Java können auf zwei Arten geplant werden, nämlich Zeitscheiben und präventive Planung.
Lassen Sie uns mit den nächsten Java-Interviewfragen zum Thema Multithreading fortfahren.
Antwort:Nein, ein Thread kann nicht zweimal gestartet werden. Wenn wir versuchen, einen Thread zweimal zu starten, wird „java.lang.IllegalThreadStateException“ ausgelöst.
Antwort:Dies sind die beliebtesten Java-Interviewfragen zum Thema Multithreading, die in einem Interview gestellt werden. Ein Shutdown-Hook ist ein Mechanismus, der zum Bereinigen von Ressourcen verwendet wird, wenn die JVM normal oder abrupt heruntergefahren wird.
Antwort:Volatile ist ein Schlüsselwort in Java und kann mit Variablen verwendet werden. Wenn eine Variable als flüchtig deklariert ist, lesen alle Threads den Wert derselben Variablen aus dem Hauptspeicher und nicht aus dem Cache; Dadurch wird das Lesen von Fehlern verhindert, wenn mehrere Threads in ihren Operationen dieselbe Variable verwenden.
Antwort:Java bietet zwei Möglichkeiten, Threads in einem Programm zu implementieren. Die Schnittstelle java.Lang.Runnable verfügt über eine Instanz der Java.lang.A-Zeile, die erfordert, dass eine Aufgabe über eine Instanz ausgeführt wird. Die Thread-Klasse implementiert Runnable bereits, sodass ein Benutzer die run()-Methode direkt überschreiben kann, indem er die Thread-Klasse erweitert oder die Runnable-Schnittstelle implementiert.
Antwort:Java bietet eine bessere Möglichkeit, die Runnable-Schnittstelle zu implementieren, als die Thread-Klasse zu erweitern, da Java nur eine einzelne Vererbung zulässt. Da eine Klasse mehrere Schnittstellen implementieren, aber nur eine Klasse erweitern kann, bietet dies eine größere Flexibilität beim Teilen von Code zwischen Klassen.
Antwort:Der Grund dafür ist der Thread-Scheduler, der die Ausführung von Threads übernimmt. Der Scheduler kann auf Windows-, UNIX- und LINUX-Plattformen unterschiedliche Leistungen erbringen. Während der Ausführung kann derselbe Thread auf verschiedenen Plattformen unterschiedliche Ausgaben liefern, manchmal sogar auf derselben Plattform. Um dieses Problem zu lösen, kann ein Benutzer dasselbe Runnable-Objekt erstellen, run()-Schleifen in beiden Threads erstellen und beide Zeilen gemeinsam starten.
Answer:Java facilitates users to share variables present in different threads. A volatile variable acts as a unique modifier that can be used only for instance variables. It provides that a write will happen before any consequent read. The Java memory model ensures the consistency of this variable.
Answer:The synchronized keyword is used when the goal is to allow only one thread to run at a time in a specific section of code. It can be applied to define four different types of blocks, as shown below:
It can be declared as follows:
Public synchronized void example () {}
A volatile variable will never land up in a deadlock as it does not require obtaining any lock. While in synchronized variables, it may end up in a draw if they are not done correctly.
Answer:Object class has monitors that allow the Thread to lock an object, while Thread does not have any monitors. The object class’s monitor checks for the thing to see if it is available. Thread class having these methods would not help as multiple threads exist on an object, not vice versa.
Answer:
Answer:In Java, multithreading, one cannot force start a thread. Only thread schedulers can control lines and are not exposed to any API for control.
Answer:A thread in the sleep() method does not leave the lock and moves to the waiting state. The Thread waits for sleep time to get over.
Answer :
When it comes to software development, multithreading has several benefits:
Answer:
1. Preemptive Scheduling:It is a scheduling technique used by operating systems that allows the system to start or stop a task that is presently underway in order to focus on a higher priority task.
Example: In a preemptive scheduling system, even if a lower-priority task is presently running, it may be preempted from execution if a higher-priority task becomes ready to run.
2. Round Robin Scheduling (Time Slicing):It is a scheduling technique where each process or thread is assigned a fixed time slot or quantum during which it can execute. Once the time slice expires, the next task in the queue is given CPU time.
For instance, if the time slice is set to 10 milliseconds and there are three tasks (A, B, and C), each task receives 10 milliseconds of CPU time in a cyclic fashion (A for 10 ms, then B for 10 ms, and so on).
Answer:Every thread in a system that is waiting for a resource that another waiting thread is holding causes a deadlock. In this case, all of the threads are in a universal waiting state because none of them can continue executing. A deadlock occurs when there is no opportunity for any thread to execute, leading to a halt. Complex circumstances known as deadlocks can impair a program’s regular runtime and possibly lead to coding problems. Maintaining the system’s performance and stability requires controlling and avoiding deadlocks.
Answer:Tools that display blocked threads, such as thread dumps, can be used to identify deadlocks. TryLock with timeouts, acquiring locks in a consistent order, and reducing lock contention are ways to prevent deadlocks. To lower the chance of deadlocks, properly design multithreaded programs and make use of higher-level concurrency tools.
Answer:Yes, every thread in multithreaded programming has a separate stack. Local variables and details about each thread’s function calls are kept on the stack. Each thread will function independently and have a dedicated area to manage its execution context because of this division.
Answer:A class is considered thread-safe when multiple threads can use its methods or objects concurrently without experiencing conflicts. In multithreaded programming, achieving thread safety is essential to avoiding race situations. This can be done in a few different ways:
Answer:
Characteristic | User Threads | Daemon Threads |
Creation and Control | created and managed by the user or the application. | The application or user creates and controls these threads, but they can be explicitly set as daemon threads using the setDaemon(true) method. |
JVM Termination Impact | JVM will wait for user threads to complete before exiting. | JVM can exit even if daemon threads are still running. Daemon threads are abruptly stopped if all user threads have finished their execution. |
Example (Java) |
java Thread userThread = new Thread(() -> { /* Thread logic */ }); userThread.start();
Nach dem Login kopieren
|
java Thread daemonThread = new Thread(() -> { /* Thread logic */ }); daemonThread.setDaemon(true); daemonThread.start();
Nach dem Login kopieren
|
Answer:The Thread class in Java provides the setDaemon(boolean on) method, which can be used to create daemon threads. When all non-daemon threads have finished running, a daemon thread operates in the background and does not stop the Java Virtual Machine (JVM) from shutting down.
Here’s an easy illustration:
public class DaemonThreadExample { public static void main(String[] args) { Thread daemonThread = new Thread(() -> { while (true) { // Do some background tasks System.out.println("Daemon Thread is running"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } }); // Setting the thread as daemon daemonThread.setDaemon(true); // Starting the daemon thread daemonThread.start(); // Main thread System.out.println("Main thread is finished"); } }
Output:
Explanation:
The daemonThread.setDaemon(true) line in this example designates the thread as a daemon thread. Regardless of its state, the daemon thread will end when the main thread completes its execution and the JVM terminates.
It is crucial to remember that a thread will throw an IllegalThreadStateException if it is not started as a daemon. You are unable to alter a thread’s daemon status once it has begun.
Answer:
1. notify():
2. notifyAll():
Answer:Multiple processes create a deadlock in computing when they become stuck holding resources, waiting for another process to acquire that resource. This situation prevents any progress and results in mutual blocking between the processes.
When the following four requirements referred to as the Coffman conditions—are satisfied, a deadlock usually results:
Das obige ist der detaillierte Inhalt vonMultithreading-Interviewfragen in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!