40 лучших вопросов и ответов на многопоточном собеседовании (2025 г.)
Лучшие вопросы на собеседовании по многопоточности Java
Вот вопросы и ответы на многопоточные собеседования для новичков, а также для опытных кандидатов, желающих получить работу своей мечты.
1) Что такое нить?
Поток — это параллельная единица выполнения. Можно сказать, что это часть процесса, которая может легко выполняться одновременно с другими частями процесса.
Бесплатная загрузка в формате PDF: Многопоточные вопросы и ответы на собеседовании
2) Что такое многопоточность?
многопоточность в Java — это процесс одновременного выполнения двух или более потоков с максимальной загрузкой процессора.
Основным преимуществом является:
- Потоки используют одно и то же адресное пространство
- Нить остается легкой
- Стоимость связи между потоками низкая.
3) Какие состояния связаны с потоком?
- Готовый
- Бег
- Ожидание
- Мертвое состояние
4) Обсудить жизненный цикл потока?
Жизненный цикл потока аналогичен жизненному циклу процессов, выполняющихся в операционная система. В течение своего жизненного цикла поток может переходить из одного состояния в другое. Однако это зависит от выполняемой над ним операции.
5) Каковы состояния потока?
Ниже приведены различные состояния потока:
Новое: Только что созданный поток находится в новом состоянии. Когда вызывается метод start(), поток переходит в состояние готовности. Затем планировщик потоков переводит его в рабочее состояние.
- Работоспособен: Поток, готовый к запуску
- Бег: Выполняемый поток находится в рабочем состоянии.
- Заблокировано: Заблокированный поток ожидает блокировки монитора в этом состоянии. Это также может произойти, когда поток выполняет операцию ввода-вывода и переходит в следующее состояние.
- Ожидание: Это поток, который ожидает, пока другой поток выполнит определенное действие.
- Время_ожидания: Это поток, ожидающий выполнения другого потока.
- Прекращено: Вышедший поток находится в этом состоянии.
6) Каковы основные различия между потоком и процессом?
Поток является подмножеством процесса. Процесс может содержать несколько потоков. Процесс может выполняться в разных областях памяти, но все потоки используют одно и то же пространство памяти.
7) Что такое тупик?
Взаимная блокировка — это ситуация, когда поток ожидает блокировки объекта, полученной другим потоком, а второй поток также ожидает блокировки объекта, полученной первым потоком. Поскольку оба потока ждут освобождения друг друга, это состояние называется взаимоблокировкой.
8) Что такое LiveLock?
Livelock возникает, когда все потоки блокируются и не могут выполняться из-за недоступности необходимых ресурсов и отсутствия какого-либо разблокированного потока.
Livelock может возникнуть в следующих случаях:
- Когда все потоки программы выполняются на объекте с нулевыми параметрами. Программа заблокирована в реальном времени и никогда не обрабатывается до тех пор, пока один или несколько потоков не вызовут Object.notify() или Object.notifyAll() для соответствующих объектов.
- Livelock также происходит, когда все потоки в программе застревают в бесконечных циклах.
9) Что такое монитор?
- Монитор — это часть кода, который может выполняться только одним потоком одновременно.
- Если какой-либо другой поток попытается получить доступ в то же время, он будет приостановлен до тех пор, пока текущий поток не освободит монитор.
10) Что вы подразумеваете под голоданием потоков?
В ситуации, когда потоку не хватает процессора для его выполнения, происходит голодание потока.
Однако это может произойти в следующих сценариях.
- Потоки с низким приоритетом будут получать меньше ресурсов ЦП по сравнению с потоками с высоким приоритетом. Поток с более низким приоритетом может голодать, ожидая получения большего пространства ЦП для выполнения вычислений.
- Поток может бесконечно ждать блокировки монитора объекта, но notify() может неоднократно пробуждать некоторые другие потоки. В этом случае поток также умирает.
11) Что означает занятое вращение в многопоточности?
Спин занятости — это метод, который используют параллельные программисты, чтобы заставить поток ждать при определенных условиях. Это сильно отличается от традиционных методов, таких как wait() и Sleep(), которые подразумевают отказ от управления процессором. Этот метод не требует отказа от процессора, вместо этого он просто запускает пустой цикл.
12) Что такое переключение контекста в многопоточности?
Это процесс сохранения и восстановления состояния процессора. Это помогает продолжить выполнение потока из той же точки в более поздний момент времени. Это одна из важнейших функций многозадачной операционной системы и поддержки многопоточной среды.
13) Почему поведение потока непредсказуемо?
Мы можем сказать, что поведение потоков непредсказуемо, поскольку выполнение потоков зависит от планировщика потоков. Следует помнить, что каждый планировщик потоков имеет свою реализацию на разных платформах, таких как Windows, Unix и т. д.
14) Как приостановить выполнение потока на определенное время?
Метод Sleep() используется для приостановки выполнения потока на определенное время. Однако это не остановит обработку потока на определенное время. Однако, когда поток выходит из спящего режима, его состояние меняется на работоспособное, и на основе планирования потоков он будет выполнен.
15) Каковы многочисленные способы перехода потока в состояние ожидания?
Поток может войти в состояние ожидания следующими способами:
- Использование метода сна()
- Блокировка ввода/вывода
- Неудачная попытка получить блокировку объекта
- Вызов метода wait() объекта.
16) Что произойдет, если мы не переопределим метод запуска?
В 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.start() (собственный метод) класса Thread выполняет работу по запуску метода Thread.A run() в потоке. Итак, если мы напрямую вызываем Thread., метод run() также выполняется в том же потоке. Таким образом, это никогда не решит цель создания нового потока.
18) Как создать тему в Java?
Существует два метода создания потока в Java.
- Сначала реализовав интерфейс Runnable, а затем создав из него объект потока.
- Второй метод — расширить класс потока.
19) Что означает приоритет потока?
Каждый поток имеет приоритет. Однако более высокий приоритет также имеет приоритет при выполнении. Однако это также зависит от реализации планировщика потоков, которая зависит от ОС. Можно изменить приоритет потока, но это не гарантирует, что поток с более высоким приоритетом будет выполнен первым.
20) Что делает метод join()?
Метод join() ожидает завершения потока. Он заставляет все запущенные потоки прекратить выполнение до тех пор, пока поток не присоединится для завершения своей работы.
21) Что такое перехватчик завершения работы Java?
Перехватчик завершения работы Java используется для очистки ресурсов при завершении работы JVM. Очистка ресурсов означает закрытие файла журнала, отправку каких-либо предупреждений или что-то еще. Перехватчик завершения работы необходимо использовать для выполнения кода до завершения работы JVM.
22) Каковы два основных варианта использования летучих данных в Java?
Потокам разрешено хранить значения переменных в локальной памяти. Если переменная помечена как изменчивая, то каждый раз, когда используется одна и та же переменная, ее необходимо читать из основной памяти.
Таким же образом, каждый раз, когда переменная записывается, ее значение должно сохраняться в основной памяти.
23) Как можно обмениваться данными между двумя потоками в Java?
Мы можем получать данные между потоками, используя общий объект или параллельные потоки. структура данных например BlockingQueue. Он реализует шаблон производитель-потребитель, используя методы ожидания и уведомления. Это также предполагает совместное использование объектов между двумя потоками.
24) Как можно одновременно управлять несколькими потоками?
Одновременно можно управлять несколькими потоками, если они созданы в объекте ThreadGroup.
25) Что такое метод блокировки в Java?
В Java метод блокировки — это метод, который блокируется до тех пор, пока задача не будет выполнена. Например, метод Accept () блока ServerSocket до момента подключения клиента. Здесь блокировка относится ко всему, управление над чем не вернется к вызывающей стороне, пока задача не будет завершена.
26) В чем основная разница между методами wait() и Sleep()?
Ждать() | Спать() |
Этот метод определен в классе Object | Метод определен в классе Thread. |
Метод Wait() снимает блокировку | Этот метод никогда не снимает блокировку. |
27) Что такое неизменяемый объект? Как это может помочь в написании параллельного приложения?
Любой объект можно считать неоспоримым, если его состояние не меняется после создания. Неизменяемые объекты используются при создании простых, надежных и параллельных приложений.
Для создания неизменяемого объекта важно сделать класс и его член окончательными, чтобы после создания объектов их состояние не менялось.
28) Скажи мне, в чем разница между уступать и спать?
Когда задача вызывает метод yield(), она возвращается в состояние готовности.
Когда задача вызывает метод Sleep(), она возвращается в состояние ожидания.
29) Что такое ThreadPool?
ThreadPool — это пул потоков, который повторно использует фиксированное количество потоков для выполнения конкретной задачи.
30) Для чего используется ключевое слово Synchronized?
Ключевое слово Synchronized можно применять как к статическому, так и к нестатическому методу. При использовании Synchronized только один поток может получить доступ к синхронизированным методам. Однако в ситуации, когда несколько потоков пытаются получить доступ к одному и тому же методу. В это время другим потокам приходится ждать потока выполнения. Он также обеспечивает блокировку объекта для предотвращения состояния гонки.
public void synchronized method1(){} public void synchronized staticmethod1(){} public void myMethod(){ synchronized (this){ //synchronized keyword on block of code } }
31) Что такое изменчивое ключевое слово?
Ключевое слово Volatile — это квалификатор, который применяется к переменной при ее объявлении. Он сообщает компилятору, что значение переменной может измениться в любой момент без каких-либо действий со стороны кода.
32) Каковы основные различия между notify и notifyAll в Java?
Метод Notify() не предоставляет никакого способа выбрать конкретный поток, поэтому он полезен только тогда, когда один метод While notifyAll() отправляет уведомление всем потокам. Это также позволяет им конкурировать за замки. Это также гарантирует, что хотя бы один поток продолжит работу.
33) Какой параметр JVM используется для управления размером стека потока?
Для управления размером стека Thread в Java используется параметр Xss.
34) Можете ли вы дважды запустить поток на Java?
Нет, если поток запущен, его нельзя запустить второй раз.
35) Какова цель использования метода доходности класса потока?
Метод Yield — это самый простой способ запросить текущий поток освободить процессор для другого потока. Это статический метод, который гарантирует только то, что текущий поток освободит ЦП, но ничего не говорит о том, какой другой поток также влияет на ЦП.
36) Когда мы можем сказать, что потоки не являются легковесными процессами в Java?
Потоки не являются легковесными процессами, когда потоки одного и того же процесса выполняются одновременно. Хотя, если потоки разных процессов выполняются одновременно, потоки становятся тяжеловесным процессом.
37) Можно ли синхронизировать конструктор Java-класса?
В соответствии со стандартом Java конструкторы не могут быть синхронизированы, поскольку другие потоки не могут видеть объект до того, как процесс создания потока завершит его. Нет необходимости синхронизировать конструктор объектов Java, поскольку он блокирует создаваемый объект.
38) Что такое переходная переменная?
Временная переменная — это переменная, которую нельзя сериализовать во время сериализации. Во время сериализации он инициализируется значением по умолчанию.
Эти вопросы для собеседования также помогут вам в устной речи.
Hii
мне это действительно помогает. во время подготовки к собеседованию.
Очень похвально написать эту статью и предоставить эту информацию.
Я обязан
5) Каковы состояния потока?
Runnable — это не состояние «Работа». Он готов к запуску
обновлено! Спасибо за указание на это
1. Работоспособные состояния рассматриваются как двухслойный уровень на уровне ОС.
2. Почти все языки программирования рассматривают поток как работоспособный или НЕТ.
3. Выполняемый поток может находиться в состоянии (готов или запущен).
4. У вас может быть два потока в работоспособном состоянии, но в «работающем» состоянии будет существовать только один поток.
в то время как второй поток существует в «работающем» состоянии.