상위 40가지 멀티스레딩 인터뷰 질문 및 답변(2024)
주요 Java 멀티스레딩 인터뷰 질문
다음은 꿈의 직업을 얻기 위한 신입 지원자와 숙련된 지원자를 위한 멀티스레딩 인터뷰 질문 인터뷰 질문 및 답변입니다.
1) 스레드란 무엇입니까?
스레드는 동시 실행 단위입니다. 프로세스의 다른 부분과 동시에 쉽게 실행할 수 있는 프로세스의 일부라고 말할 수 있습니다.
무료 PDF 다운로드: 멀티스레딩 인터뷰 질문 및 답변
2) 멀티스레딩이란 무엇입니까?
멀티 스레딩 Java에서는 CPU를 최대한 활용하기 위해 두 개 이상의 스레드를 동시에 실행하는 프로세스입니다.
주요 이점은 다음과 같습니다.
- 스레드는 동일한 주소 공간을 공유합니다.
- 스레드는 경량으로 유지됩니다.
- 스레드 간 통신 비용이 낮습니다.
3) 스레드와 관련된 상태는 무엇입니까?
- 준비
- 달리는
- 기다리는
- 죽은 상태
4) 스레드 수명주기에 대해 논의하시겠습니까?
스레드의 수명주기는 스레드에서 실행되는 프로세스의 수명주기와 유사합니다. 운영 체제. 수명 주기 동안 스레드는 한 상태에서 다른 상태로 이동할 수 있습니다. 그러나 수행되는 작업에 따라 다릅니다.
5) 스레드 상태는 무엇입니까?
다음은 다양한 스레드 상태입니다.
새로운 : 방금 인스턴스화된 스레드는 새로운 상태에 있습니다. start() 메소드가 호출되면 스레드는 준비 상태가 됩니다. 그런 다음 스레드 스케줄러에 의해 실행 가능 상태로 이동됩니다.
- 실행 가능 : 실행할 준비가 된 스레드
- 달리는: 실행 중인 스레드는 실행 상태입니다.
- 막힌: 차단된 스레드가 모니터 잠금을 기다리고 있는 상태입니다. 이는 스레드가 I/O 작업을 수행하고 다음 상태로 이동할 때도 발생할 수 있습니다.
- 기다리는: 다른 스레드가 특정 작업을 수행하기를 기다리는 스레드입니다.
- Timed_waiting: 다른 스레드가 수행되기를 기다리는 스레드입니다.
- 종료: 종료된 스레드는 이 상태입니다.
6) 스레드와 프로세스의 주요 차이점은 무엇입니까?
스레드는 프로세스의 하위 집합입니다. 프로세스에는 여러 스레드가 포함될 수 있습니다. 프로세스는 다른 메모리 공간에서 실행될 수 있지만 모든 스레드는 동일한 메모리 공간을 공유합니다.
7) 교착상태란 무엇인가?
교착 상태는 스레드가 다른 스레드에서 획득한 개체 잠금을 기다리고 있고 두 번째 스레드도 첫 번째 스레드에서 획득한 개체 잠금을 기다리는 상황입니다. 두 스레드가 서로 해제되기를 기다리고 있으므로 이 상태를 교착 상태라고 합니다.
8) 라이브락이란 무엇인가요?
Livelock은 필요한 리소스를 사용할 수 없고 차단 해제된 스레드가 존재하지 않아 모든 스레드가 차단되고 실행할 수 없을 때 발생합니다.
Livelock은 다음 조건에서 발생할 수 있습니다.
- 프로그램의 모든 스레드가 매개변수가 없는 개체에서 실행되는 경우입니다. 프로그램은 실시간으로 잠겨 있으며 하나 이상의 스레드가 관련 개체에 대해 Object.notify() 또는 Object.notifyAll()을 호출할 때까지 처리되지 않습니다.
- Livelock은 프로그램의 모든 스레드가 무한 루프에 갇힐 때도 발생합니다.
9) 모니터란 무엇인가요?
- 모니터는 한 번에 하나의 스레드에서만 실행할 수 있는 코드 본문입니다.
- 다른 스레드가 동시에 액세스를 시도하면 현재 스레드가 모니터를 해제할 때까지 일시 중단됩니다.
10) 스레드 기아란 무엇을 의미합니까?
스레드 실행에 충분한 CPU가 없는 상황에서는 스레드 기아가 발생합니다.
그러나 다음과 같은 시나리오에서는 발생할 수 있습니다.
- 낮은 우선순위 스레드는 높은 우선순위 스레드에 비해 더 적은 CPU를 얻습니다. 우선 순위가 낮은 스레드는 계산을 수행하기 위해 더 많은 CPU 공간을 확보하기 위해 기다리다가 굶어 죽을 수 있습니다.
- 스레드는 객체 모니터의 잠금을 무기한 기다리고 있을 수 있지만, inform()은 일부 다른 스레드를 반복적으로 깨울 수 있습니다. 이 경우 스레드도 굶어 죽습니다.
11) 멀티스레딩에서 비지스핀의 의미는 무엇입니까?
Busy Spin은 동시 프로그래머가 특정 조건에서 스레드를 기다리게 하기 위해 사용하는 기술입니다. 이는 CPU 제어권을 포기하는 wait() 및 sleep()과 같은 기존 방법과는 상당히 다릅니다. 이 방법은 CPU를 포기할 필요가 없으며 대신 빈 루프를 실행합니다.
12) 멀티스레딩에서 컨텍스트 전환이란 무엇입니까?
CPU 상태를 저장하고 복원하는 과정입니다. 이는 다음을 수행하는 데 도움이 됩니다. 이력서 나중에 동일한 지점에서 스레드를 실행합니다. 멀티 태스킹 운영 체제의 필수 기능 중 하나이며 멀티 스레드 환경을 지원합니다.
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에서 스레드를 생성하는 방법에는 두 가지가 있습니다.
- 먼저 Runnable 인터페이스를 구현한 다음 이 인터페이스에서 스레드 개체를 만듭니다.
- 두 번째 방법은 스레드 클래스를 확장하는 것입니다.
19) 스레드 우선순위의 의미는 무엇입니까?
모든 스레드에는 우선순위가 있습니다. 그러나 우선순위가 높을수록 실행 시 우선순위가 높아집니다. 그러나 이는 OS에 따라 달라지는 스레드 스케줄러 구현에 따라 달라집니다. 스레드의 우선순위를 변경할 수는 있지만 우선순위가 높은 스레드가 먼저 실행된다는 보장은 없습니다.
20) Join() 메소드는 무엇을 합니까?
Join() 메소드는 스레드가 죽을 때까지 기다립니다. 스레드가 작업을 완료하기 위해 조인할 때까지 실행 중인 모든 스레드의 실행을 강제로 중지합니다.
21) 자바 종료 후크란 무엇입니까?
Java 종료 후크는 JVM이 종료될 때 리소스를 정리하는 데 사용됩니다. 깨끗한 리소스는 로그 파일을 닫거나 경고 등을 보내는 것을 의미합니다. JVM이 종료되기 전에 코드를 실행하려면 종료 후크를 사용해야 합니다.
22) Java에서 휘발성의 두 가지 주요 용도는 무엇입니까?
스레드는 로컬 메모리에 변수 값을 보유할 수 있습니다. 변수가 휘발성으로 표시되면 동일한 변수가 사용될 때마다 주 메모리에서 읽어야 합니다.
마찬가지로 변수를 쓸 때마다 해당 값을 메인 메모리에 저장해야 합니다.
23) Java에서 두 스레드 간에 데이터를 어떻게 공유할 수 있습니까?
공유 객체를 사용하거나 동시 사용을 통해 스레드 간에 데이터를 가져올 수 있습니다. 데이터 구조 BlockingQueue와 같습니다. 대기 및 알림 메서드를 사용하여 생산자-소비자 패턴을 구현합니다. 또한 두 스레드 간에 개체를 공유하는 것도 포함됩니다.
24) 여러 스레드를 동시에 제어하려면 어떻게 해야 합니까?
여러 스레드가 ThreadGroup 개체에 생성되면 동시에 제어할 수 있습니다.
25) Java의 차단 방법이란 무엇입니까?
Java에서 차단 방법은 작업이 완료될 때까지 차단하는 방법입니다. 예를 들어 ServerSocket의 accept() 메서드는 클라이언트가 연결될 때까지 차단됩니다. 여기서 차단이란 작업이 끝날 때까지 제어권이 호출자에게 반환되지 않는 모든 것을 의미합니다.
26) wait() 메소드와 sleep() 메소드의 주요 차이점은 무엇입니까?
기다림() | 잠() |
이 메소드는 Object 클래스에 정의되어 있습니다. | 메소드는 Thread 클래스에 정의되어 있습니다. |
Wait() 메서드가 잠금을 해제합니다. | 이 방법은 잠금을 해제하지 않습니다. |
27) 불변 객체란 무엇입니까? 동시 애플리케이션 작성에 어떻게 도움이 됩니까?
모든 객체는 생성된 후 상태가 변경되지 않으면 도전할 수 없는 것으로 간주될 수 있습니다. 불변 객체는 간단하고 안정적이며 동시 애플리케이션을 만드는 데 사용됩니다.
불변 객체를 생성하려면 일단 객체가 생성되면 상태가 수정되지 않도록 클래스와 해당 멤버를 최종으로 만드는 것이 중요합니다.
28) 양보하는 것과 자는 것의 차이점을 말해주세요.
작업이 해당 Yield() 메서드를 호출하면 준비 상태로 돌아갑니다.
작업이 sleep() 메서드를 호출하면 대기 상태로 돌아갑니다.
29) ThreadPool이란 무엇입니까?
ThreadPool은 특정 작업을 실행하기 위해 고정된 수의 스레드를 재사용하는 스레드 풀입니다.
30) 동기화 키워드의 용도는 무엇입니까?
동기화된 키워드는 정적 또는 비정적 메서드에 적용할 수 있습니다. 동기화를 사용하면 하나의 스레드만 동기화된 메서드에 액세스할 수 있습니다. 그러나 동일한 메소드에 액세스하려는 여러 스레드가 있는 상황에서는 다음과 같습니다. 이때 다른 스레드는 실행 스레드를 기다려야 합니다. 또한 경합 상태를 방지하기 위해 개체에 대한 잠금 기능을 제공합니다.
public void synchronized method1(){} public void synchronized staticmethod1(){} public void myMethod(){ synchronized (this){ //synchronized keyword on block of code } }
31) 휘발성 키워드란 무엇입니까?
휘발성 키워드는 변수가 선언될 때 적용되는 한정자입니다. 이는 코드에서 어떤 조치도 취하지 않고도 변수 값이 언제든지 변경될 수 있음을 컴파일러에 알려줍니다.
32) Java에서 통지와 통지All의 주요 차이점은 무엇입니까?
Notify() 메소드는 특정 스레드를 선택하는 방법을 제공하지 않으므로 단일 While informAll()이 모든 스레드에 알림을 보낼 때만 유용합니다. 또한 잠금을 놓고 경쟁할 수도 있습니다. 또한 최소한 하나의 스레드가 계속 진행되도록 보장합니다.
33) 스레드의 스택 크기를 제어하는 데 사용되는 JVM 매개변수는 무엇입니까?
Java에서는 Thread의 스택 크기를 제어하기 위해 Xss 매개변수가 사용됩니다.
34) Java에서는 스레드를 두 번 시작할 수 있습니까?
아니요, 스레드가 시작된 후에는 두 번째로 시작할 수 없습니다.
35) 스레드 클래스의 항복 메소드를 사용하는 목적은 무엇입니까?
항복 방법은 다른 스레드가 CPU를 포기하도록 현재 스레드에 요청하는 가장 간단한 방법입니다. 이는 정적 방법이며 현재 스레드가 CPU를 포기한다는 것만 보장하지만 어떤 다른 스레드가 CPU에 영향을 미치는지에 대해서는 아무 것도 알려주지 않습니다.
36) Java에서 스레드가 경량 프로세스가 아니라고 말할 수 있는 경우는 언제입니까?
동일한 프로세스의 스레드가 동시에 실행될 때 스레드는 경량 프로세스가 아닙니다. 그러나 동시에 다른 프로세스의 스레드가 실행되고 있으면 스레드는 무거운 프로세스가 됩니다.
37) Java 클래스의 생성자를 동기화하는 것이 가능합니까?
Java 표준에서는 스레드 생성 프로세스가 완료되기 전에 다른 스레드가 개체를 볼 수 없으므로 생성자를 동기화할 수 없습니다. 생성되는 객체를 잠그기 때문에 동기화할 Java 객체 생성자가 필요하지 않습니다.
38) 과도변수란 무엇인가요?
임시 변수는 직렬화 중에 직렬화할 수 없는 변수입니다. 직렬화 중에 기본값으로 초기화됩니다.
이 인터뷰 질문은 당신의 비바(구술)에도 도움이 될 것입니다.
히
정말 도움이 됩니다. 면접 준비하는 동안.
이 기사를 작성하고 이러한 정보를 제공하는 것은 정말 칭찬할만한 일입니다.
나는
5) 스레드 상태는 무엇입니까?
Runnable이 실행 상태가 아닙니다. 실행할 준비가 되었습니다.
업데이트되었습니다! 이 점을 지적해 주셔서 감사합니다.
1. 실행 가능한 상태는 OS 수준에서 이중층으로 간주됩니다.
2. 거의 모든 프로그래밍 언어는 스레드를 실행 가능 여부로 간주합니다.
3. 실행 가능한 스레드는 (준비 또는 실행 중) 상태일 수 있습니다.
4. 실행 가능 상태에 두 개의 스레드가 있을 수 있지만 "실행 중" 상태에는 하나의 스레드만 존재합니다.
두 번째 스레드는 "실행 중" 상태에 있습니다.