Топ 40 въпроса и отговора за многонишково интервю (2025)
Най-популярни въпроси за интервю за Java Multithreading
Ето въпроси и отговори за интервю с многонишкови въпроси за интервю за новопостъпили, както и за опитни кандидати, за да получат мечтаната работа.
1) Какво е нишка?
Нишката е едновременна единица за изпълнение. Можем да кажем, че това е част от процеса, която може лесно да работи едновременно с други части на процеса.
Безплатно изтегляне на PDF: Въпроси и отговори за многопоточно интервю
2) Какво е многопоточност?
Многопоточност в Java е процес на изпълнение на две или повече нишки едновременно за максимално използване на процесора.
Основното предимство е:
- Нишките споделят едно и също адресно пространство
- Нишката остава лека
- Разходите за комуникация между нишките са ниски.
3) Какви са състоянията, свързани с нишката?
- Готов
- Работещи
- Очакване
- Мъртво състояние
4) Обсъдете жизнения цикъл на нишката?
Жизненият цикъл на една нишка е подобен на жизнения цикъл на процесите, изпълнявани в операционната система. По време на своя жизнен цикъл нишката може да преминава от едно състояние в друго. Зависи обаче от извършената операция.
5) Какви са състоянията на нишката?
Следват различните състояния на нишката:
Ново: Нишка, която току-що е създадена, е в новото състояние. Когато се извика метод start(), нишката става състояние на готовност. След това се премества в състояние на изпълнение от планировчика на нишки.
- Работим: Нишка, която е готова за изпълнение
- Работещи: Нишка, която се изпълнява, е в състояние на изпълнение.
- блокиран: Блокирана нишка чака заключване на монитора е в това състояние. Това нещо може да се случи и когато една нишка извърши I/O операция и премине към следващото състояние.
- Очакване: Това е нишка, която чака друга нишка да извърши конкретното действие.
- Timed_waiting: Това е нишка, която чака друга нишка да се изпълни.
- Прекратено: Нишка, която е излязла, е в това състояние.
6) Какви са основните разлики между нишка и процес?
Нишката е подмножество на процеса. Процесът може да съдържа множество нишки. Процесът може да работи върху различно пространство в паметта, но всички нишки споделят едно и също пространство в паметта.
7) Какво е задънена улица?
Безизходица е ситуация, когато една нишка чака за заключване на обект, което се придобива от друга нишка, а втората нишка също чака за заключване на обект, което се придобива от първата нишка. Тъй като и двете нишки чакат една друга да освободят това състояние се нарича блокиране.
8) Какво е LiveLock?
Livelock възниква, когато всички нишки са блокирани и не могат да се изпълнят поради липсата на необходимите ресурси и липсата на нито една неблокирана нишка.
Livelock може да възникне при следните условия:
- Когато всички нишки в програма се изпълнят върху обект с нула параметри. Програмата е заключена на живо и никога не се обработва, докато една или повече нишки не извикат Object.notify () или Object.notifyAll() на съответните обекти.
- Livelock също се случва, когато всички нишки в една програма са блокирани в безкрайни цикли.
9) Какво е монитор?
- Мониторът е тяло от код, който може да се изпълнява само от една нишка наведнъж.
- Ако някоя друга нишка се опита да получи достъп по същото време, тя ще бъде спряна, докато текущата нишка не освободи монитора.
10) Какво имате предвид под гладуване на нишка?
В ситуация, когато една нишка няма достатъчно CPU за нейното изпълнение, възниква глад на нишката.
Това обаче може да се случи при следните сценарии
- Нишките с нисък приоритет ще получат по-малко процесор в сравнение с нишките с висок приоритет. Нишката с по-нисък приоритет може да гладува в очакване да получи повече място в процесора за извършване на изчисления.
- Нишката може да чака неопределено време за заключване на монитора на обекта, но notify() може многократно да събужда някои други нишки. В този случай нишката също гладува.
11) Какво е значението на заето въртене при многопоточност?
Заето въртене е техника, която паралелните програмисти използват, за да накарат нишката да изчака при определени условия. Това е доста различно от традиционните методи като wait() и sleep(), които включват отказ от контрол на процесора. Този метод не изисква изоставяне на процесора, вместо това той просто изпълнява празния цикъл.
12) Какво представлява превключването на контекста при многопоточност?
Това е процес на съхраняване и възстановяване на състоянието на процесора. Това помага за продължи изпълнение на нишка от същата точка в по-късен момент. Това е една от основните характеристики за многозадачна операционна система и поддръжка за многонишкова среда.
13) Защо поведението на нишката е непредвидимо?
Можем да кажем, че поведението на нишките е непредсказуемо, тъй като изпълнението на Threads зависи от Thread scheduler. Трябва да запомните, че всеки планировчик на нишки има различна реализация на различни платформи като 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 Priority?
Всяка нишка има приоритет. По-високият приоритет обаче също има предимство при изпълнение. Това обаче зависи и от внедряването на Thread Scheduler, което зависи от операционната система. Възможно е да промените приоритета на нишката, но това не дава гаранция, че нишката с по-висок приоритет ще бъде изпълнена първа.
20) Какво прави методът join()?
Методът join() чака нишката да умре. Той принуждава всички работещи нишки да спрат да се изпълняват до момента, в който нишката се присъедини, за да завърши работата си.
21) Какво е Java Shutdown Hook?
Куката за изключване на Java се използва за почистване на ресурси, когато 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, само една нишка може да има достъп до синхронизирани методи. Въпреки това, в ситуация, в която има множество нишки, които се опитват да получат достъп до един и същ метод. По това време другите нишки трябва да изчакат нишката за изпълнение. Той също така осигурява заключване на обекта, за да предотврати състояние на състезание.
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) Каква е целта на използването на метода за добив на клас нишка?
Методът на добив е най-простият начин да поискате текущата нишка да освободи процесора, така че другата нишка. Това е статичен метод и само гарантира, че текущата нишка ще се откаже от процесора, но не казва нищо за това коя друга нишка също влияе върху процесора.
36) Кога можем да кажем, че нишките не са лек процес в Java?
Нишките не са олекотен процес, когато нишките от един и същи процес се изпълняват едновременно. Въпреки това, ако нишките на различни процеси се изпълняват едновременно по това време, нишките се превръщат в тежък процес.
37) Възможно ли е да се синхронизира конструкторът на Java клас?
Като стандарт на Java, конструкторите не могат да бъдат синхронизирани, тъй като други нишки не могат да видят обекта, преди процесът на създаване на нишка да го е завършил. Няма нужда конструкторът на Java Objects да бъде синхронизиран, тъй като това би заключило конструирания обект.
38) Какво е преходна променлива?
Преходна променлива е променлива, която не може да бъде сериализирана по време на сериализация. Той се инициализира до стойността си по подразбиране по време на сериализацията.
Тези въпроси за интервюто също ще ви помогнат във вашата viva (устна)
Hii
наистина ми помага. по време на подготовката на интервюто.
Наистина е похвално да напишеш тази статия и да предоставиш тази информация.
Почитам
5) Какви са състоянията на нишката?
Runnable не е Running състояние. Готово е за работа
актуализиран! Благодаря, че посочихте това
1. Изпълнимите състояния се разглеждат като двоен слой на ниво ОС
2. Почти всички езици за програмиране виждат нишката като изпълняваема или НЕ.
3. Изпълняема нишка може да бъде в състояние (готов или работещ).
4.Можете да имате две нишки в изпълняващи се състояния, но само една нишка ще съществува в „работещо“ състояние,
докато втората нишка съществува в „работещо“ състояние.