40 найпопулярніших запитань і відповідей на багатопотокових інтерв’ю (2025)

Найпопулярніші запитання для співбесіди про багатопотоковість Java

Ось питання та відповіді на багатопотокові запитання для інтерв’ю для новачків, а також для досвідчених кандидатів, щоб отримати роботу своєї мрії.


1) Що таке потік?

Потік — це одночасна одиниця виконання. Можна сказати, що це частина процесу, яка може легко працювати одночасно з іншими частинами процесу.

Безкоштовне завантаження у форматі PDF: багатопотокове інтерв’ю, запитання та відповіді


2) Що таке багатопотоковість?

Багатопотоковість в Java — це процес виконання двох або більше потоків одночасно для максимального використання ЦП.

Головною перевагою є:

  • Потоки спільно використовують той самий адресний простір
  • Нитка залишається легкою
  • Вартість зв'язку між потоками низька.

3) Які стани пов’язані з потоком?

  • Готовий
  • Робота
  • Очікування
  • Мертвий стан

4) Обговоріть життєвий цикл потоку?

Життєвий цикл потоку подібний до життєвого циклу процесів, що виконуються в операційна система. Протягом свого життєвого циклу потік може переходити з одного стану в інший. Однак це залежить від проведеної на ньому операції.


5) Що таке стани потоку?

Нижче наведено різні стани потоку:

Нове: Потік, який щойно створено, знаходиться в новому стані. Коли викликається метод start(), потік переходить у стан готовності. Потім планувальник потоків переводить його в робочий стан.

  • Запуск: Потік, який готовий до запуску
  • Запуск: Потік, який виконується, знаходиться в стані виконання.
  • заблоковано: У цьому стані заблокований потік очікує блокування монітора. Це також може статися, коли потік виконує операцію введення-виведення та переходить до наступного стану.
  • Очікування: Це потік, який очікує, поки інший потік виконає певну дію.
  • Timed_waiting: Це потік, який очікує виконання іншого потоку.
  • Припинено: Потік, який вийшов, знаходиться в цьому стані.
Багатопотокові питання інтерв'ю
Багатопотокові питання інтерв'ю

6) Які основні відмінності між потоком і процесом?

Потік є підмножиною процесу. Процес може містити кілька потоків. Процес може працювати на різних просторах пам’яті, але всі потоки спільно використовують той самий простір пам’яті.


7) Що таке безвихідь?

Взаємоблокування — це ситуація, коли потік очікує блокування об’єкта, отриманого іншим потоком, а другий потік також очікує блокування об’єкта, отриманого першим потоком. Оскільки обидва потоки чекають, поки один один звільниться, ця умова називається взаємоблокуванням.


8) Що таке LiveLock?

Livelock виникає, коли всі потоки заблоковано та не можуть виконуватися через відсутність необхідних ресурсів і відсутність жодного незаблокованого потоку.

Livelock може виникнути в таких умовах:

  • Коли всі потоки в програмі виконуються на об’єкті з нульовими параметрами. Програма заблокована в реальному часі та ніколи не обробляється, доки один або кілька потоків не викличуть Object.notify () або Object.notifyAll() для відповідних об’єктів.
  • Livelock також трапляється, коли всі потоки в програмі застрягли в нескінченних циклах.
Багатопотокові питання інтерв'ю
Багатопотоковість

9) Що таке монітор?

  • Монітор - це тіло коду, яке може виконуватися лише одним потоком одночасно.
  • Якщо будь-який інший потік одночасно намагатиметься отримати доступ, його буде призупинено, доки поточний потік не звільнить монітор.

10) Що ви маєте на увазі під голодуванням ниток?

У ситуації, коли потік не має достатньо ЦП для свого виконання, виникає голодування потоку.

Однак це може статися в наведених нижче сценаріях

  • Потоки з низьким пріоритетом отримують менше ЦП порівняно з потоками з високим пріоритетом. Потік із нижчим пріоритетом може згаснути, чекаючи, щоб отримати більше місця на ЦП для виконання обчислень.
  • Потік може нескінченно довго чекати блокування на моніторі об’єкта, але notify() може неодноразово пробуджувати деякі інші потоки. У цьому випадку також нитка голодує.

11) Яке значення зайнятого обертання в багатопоточності?

Busy spin — це техніка, яку використовують паралельні програмісти, щоб змусити потік очікувати за певних умов. Це дуже відрізняється від традиційних методів, таких як wait() і sleep(), які передбачають відмову від контролю ЦП. Цей метод не вимагає відключення ЦП, замість цього він просто запускає порожній цикл.


12) Що таке перемикання контексту в багатопоточності?

Це процес збереження та відновлення стану ЦП. Це допомагає резюме виконання потоку з тієї ж точки в більш пізній момент часу. Це одна з важливих функцій багатозадачної операційної системи та підтримки багатопотокового середовища.


13) Чому поведінка потоку непередбачувана?

Можна сказати, що поведінка потоків непередбачувана, оскільки виконання потоків залежить від планувальника потоків. Слід пам’ятати, що кожен планувальник потоків має різну реалізацію на різних платформах, таких як Windows, Unix тощо.


14) Як можна призупинити виконання потоку на певний час?

Метод sleep() використовується для призупинення виконання потоку на певний час. Однак це не зупинить обробку потоку на певний час. Однак, коли потік виходить із режиму сну, його стан змінюється на доступний для виконання, і на основі планування потоку він буде виконано.


15) Якими способами потік може перейти в стан очікування?

Потік може перейти в стан очікування наступними способами

  • Використання методу sleep().
  • Блокування на I/O
  • Невдала спроба заблокувати об’єкт
  • Викликаючи метод 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) Що означає Пріоритет потоку?

Кожен потік має пріоритет. Однак вищий пріоритет також отримує пріоритет у виконанні. Однак це також залежить від реалізації Thread Scheduler, яка залежить від ОС. Можна змінити пріоритет потоку, але це не дає гарантії, що потік із вищим пріоритетом буде виконано першим.


20) Що робить метод join()?

Метод join() очікує завершення потоку. Він змушує всі запущені потоки припинити виконання до моменту, коли потік приєднається для завершення своєї роботи.


21) Що таке Java Shutdown Hook?

Перехоплювач Java shutdown використовується для очищення ресурсів, коли JVM завершує роботу. Чисті ресурси означають закриття файлу журналу, надсилання сповіщень або щось інше. Перехоплювач вимкнення потрібно використовувати для виконання коду до завершення роботи JVM.


22) Які два основні способи використання volatile у 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 використовується для керування розміром стека потоку?

Для керування розміром стека потоку в Java використовується параметр Xss.


34) Чи можна запускати потік двічі в Java?

Ні, коли потік запущено, його не можна запустити вдруге.


35) Яка мета використання методу yield класу потоків?

Метод yield — це найпростіший спосіб запросити поточний потік відмовитися від ЦП, щоб інший потік. Це статичний метод і лише гарантує, що поточний потік відмовиться від ЦП, але нічого не повідомляє про те, який інший потік також впливає на ЦП.


36) Коли можна сказати, що потоки не є легким процесом у Java?

Потоки не є легкими процесами, якщо потоки одного процесу виконуються одночасно. Хоча, якщо в цей час потоки різних процесів виконуються одночасно, потоки стають важким процесом.


37) Чи можна синхронізувати конструктор класу Java?

Відповідно до стандарту Java конструктори не можуть бути синхронізовані, оскільки інші потоки не можуть побачити об’єкт до завершення процесу створення потоку. Немає необхідності синхронізувати конструктор Java Objects, оскільки він блокував би об’єкт, що створюється.


38) Що таке перехідна змінна?

Перехідна змінна — це змінна, яку не можна серіалізувати під час серіалізації. Під час серіалізації він ініціалізується значенням за замовчуванням.

Ці запитання для співбесіди також допоможуть вам у життєдіяльності (усному)

Поділитись

4 Коментарі

  1. Аватара навчання java каже:

    Hii
    це дійсно допомагає мені. під час підготовки до співбесіди.
    Це справді похвально написати цю статтю та надати цю інформацію.
    Icommned to

  2. Аватара Шветашрі Венкатеш каже:

    5) Що таке стани потоку?
    Runnable не є станом Running. Він готовий до запуску

    1. Аватара адмін каже:

      оновлено! Дякуємо, що звернули увагу на це

    2. Аватара Амуда Адеолу Бадмус каже:

      1. Виконувані стани розглядаються як двошаровий на рівні ОС

      2. Майже всі мови програмування бачать потік як виконуваний або НІ.

      3. Виконуваний потік може бути в стані (готовий або запущений).

      4. Ви можете мати два потоки в стані, що виконується, але тільки один потік буде існувати в стані «запущено»,
      в той час як другий потік існує в «запущеному» стані.

залишити коментар

Ваша електронна адреса не буде опублікований. Обов'язкові поля позначені * *