본문 바로가기
꼬리질문

[Java] Thread

by sangyunpark99 2025. 1. 27.
기술 면접을 대비해
Java의 Thread와 관련된 질문과 답을
꼬리 질문 형태로 작성한 글입니다.

 

Q. 자바에서 스레드란 무엇이고 어떻게 사용하나요?

 

A : 자바에서 스레드는 프로세스 내에 존재하는 주어진 작업단위를 수행하는 수행원이라고 생각합니다.

강제적으로 코드를 통해 사용할 수도 있고, 컴퓨터 자체적으로 업무를 수행하기 위해 자동으로 사용할 수도 있습니다.

 

 답변에 대한 평가 : 30점
평가 이유 : 스레드에 대한 개념은 어느 정도 맞지만, 더 정확히 설명이 필요합니다. 스레드는 프로세스 내에서 실행되는 실제 작업 단위로, 프로세스 내 리소스를 공유하며 동시에 여러 작업을 처리할 수 있는 것이 중요합니다.
검색 키워드 : Java thread, Multithreading

 

 

Q. 자바에서 스레드를 만들 때 사용하는 방법과 스레드 간 동기화에 대해서 설명해주세요.

 

A : 스레드를 만들때 우선 힙 영역과 상수 풀 영역은 공유 영역이 되고, 스택 영역 메서드 area 영역은 스레드 개별로 할당 받습니다.

스레드는 동시에 여러 스레드가 작업을 하는 경우가 존재합니다. 여러 스레드가 같은 값을 참조하는 경우 스레드 간 동기화를 해주지 않으면 동시성 문제가 발생하게 됩니다. 즉, 각 스레드에서 공통으로 사용되는 값에 대한 최신화가 중요합니다. 이러한 동시성 해결 방법으로는 lock을 사용한 방법, 세마포어를 사용하는 방법이 존재합니다.

 

답변에 대한 평가 : 40점
평가 이유 : 스레드 관련 영역에 대한 개념은 일부 정확하게 설명하셨지만, 일부 내용에서 혼동이 있습니다. 스택 영역과 힙 영역이 스레드별로 할당되는 것은 맞지만, 상수 풀은 메서드 영역에 속하며 모든 스레드가 공유하는 영역입니다. 또한, 스레드 간 동기화에 대한 설명이 얕습니다. Lock과 Semaphore는 동기화를 달성하는 방법 중 하나이지만, synchronized 키워드나 volatile 변수 사용에 대한 언급이 부족합니다.
검색 키워드 : Java thread synchronization, Java synchronized keyword

 

Q. synchronized 키워드와 volatile 키워드의 차이점은 무엇이고, 각각 어떤 상황에서 사용해야 할까요?

 

A : synchronized와 volatile은 모두 멀티스레드 환경에서 변수의 동기화를 위해 사용되지만, 동작 방식과 사용 목적이 다릅니다.

synchronized는 동기화와 원자성을 보장합니다. 특정 임계영역(critical section)을 설정해 한 번에 하나의 스레드만 접근할 수 있도록 제한하며, 스레드 간 데이터의 가시성도 보장합니다. 사용 상황은 공유 리소스를 읽고 수정하는 작업에서 동기화가 필요한 경우 사용합니다. 예를 들어, 여러 스레드가 공유 리스트에 데이터를 추가하거나, 카운터 값을 증가시킬 때 사용합니다.

volatile는 락을 사용하지 않으며, 변수의 최신 값을 모든 스레드에서 읽을 수 있도록 가시성만 보장합니다. 원자성을 보장하지 않으므로, 값을 읽고 수정하는 복잡한 연산에서는 사용할 수 없습니다. 사용 상황은 상태 플래그 관리와 같이 값의 읽기-쓰기만 필요한 단순한 상황에서 사용합니다. 예를 들어, 특정 플래그를 통해 스레드를 중단하거나 상태를 확인할 때 사용합니다.

 

답변에 대한 평가 : 95점
평가 이유 : synchronized와 volatile에 대한 개념과 사용 목적, 동작 방식에 대한 설명이 매우 명확하고 정확합니다. 각 키워드의 특징과 사용 상황을 잘 구분하여 설명해주셨습니다.
검색 키워드 : Java synchronized vs volatile

 

 

Q. synchronized 블록에서 발생하는 예외 처리 방법에 대해서도 알고 계신가요? synchronized 블록 내부에서 예외가 발생할 경우, 다른 스레드는 어떻게 행동하는지 설명해주세요.

 

A : synchronized 블록 내부에서 예외가 발생하면 현재 스레드는 해당 블록을 빠져나가며, 락이 자동으로 해제됩니다. 그 결과, 대기 중인 다른 스레드가 해당 락을 획득하고 실행을 이어나갈 수 있습니다. 이 동작은 synchronized의 락 해제 메커니즘에 따라 자동으로 이루어집니다. 예외 처리 방법은 블록 내부에서 예외를 처리 try-catch를 사용하여 블록 내부에서 발생할 수 있는 예외를 처리하고, 필요한 경우 로그를 남기거나 복구 작업을 수행합니다. 호출부에서 예외를 처리하는 방법은 예외를 블록 외부로 던지고, 호출부에서 처리하는 방식도 가능합니다. 이는 예외 처리 책임을 호출자에게 위임하는 경우에 유용합니다.

 

답변에 대한 평가 : 100점

평가 이유 : synchronized 블록 내부에서 예외 처리에 대한 설명이 매우 정확하고 자세하게 이루어졌습니다. synchronized 블록에서 예외가 발생했을 때의 동작과 락의 자동 해제, 예외 처리 방법 등을 모두 잘 설명하셨습니다.
검색 키워드 : Java synchronized block exception handling, Java synchronized block lock releasing mechanism

'꼬리질문' 카테고리의 다른 글

[Java] Generic  (0) 2025.01.27
[Java] HashMap  (0) 2025.01.27
[Java] ArrayList  (0) 2025.01.27