멀티쓰레드와 싱글쓰레드의 차이점은 무엇인가요?
멀티쓰레드는 여러 개의 쓰레드가 동시에 실행되는 것을 의미하며, 싱글쓰레드는 단일 쓰레드로 실행되는 것을 의미합니다.
멀티쓰레드는 동시성과 병렬성을 통해 작업을 분산하여 처리할 수 있으며, 싱글쓰레드는 작업을 순차적으로 처리합니다.
쓰레드와 프로세스의 차이점은 무엇인가요?
쓰레드는 프로세스 내에서 독립적으로 실행되는 작업의 단위입니다.
쓰레드는 프로세스의 자원을 공유하면서 동시에 여러 작업을 처리할 수 있게 해줍니다.
프로세스는 운영체제로부터 할당받은 자원과 실행 공간을 가지며, 하나 이상의 쓰레드로 구성될 수 있습니다.
쓰레드 동기화를 사용하는 이유는 무엇인가요?
쓰레드 동기화는 여러 쓰레드가 공유하는 자원에 대한 접근을 조절하여 데이터의 일관성과 안전성을 보장하기 위해 사용됩니다.
동기화를 통해 쓰레드 간의 경쟁 상태나 예기치 않은 결과를 방지하고, 데이터의 정확성과 일관성을 유지할 수 있습니다.
데드락(Deadlock)이란 무엇인가요?
데드락은 두 개 이상의 쓰레드가 서로가 점유한 자원을 대기하면서 아무런 진행도 이루어지지 않는 상태를 말합니다.
데드락은 쓰레드 간의 경쟁 조건, 자원의 순환 대기 등의 상황에서 발생할 수 있으며, 잘못된 동기화나 자원 할당 순서 등이 원인이 될 수 있습니다.
쓰레드 동기화에서 사용되는 synchronized 키워드와 Lock 인터페이스의 차이점은 무엇인가요?
synchronized 키워드는 자바의 내장 키워드로, 객체의 Monitor를 획득하여 동기화를 수행합니다. 사용법이 간단하고 데드락을 방지하는 장점이 있습니다.
Lock 인터페이스는 자바 5부터 추가된 인터페이스로, ReentrantLock 등의 구현체를 사용하여 더 세밀한 동기화 제어와 높은 확장성을 제공합니다.
쓰레드 동기화에서 가시성 문제(Visibility Problem)란 무엇인가요?
가시성 문제는 쓰레드 간에 공유된 변수의 변경 내용이 다른 쓰레드에게 즉시 반영되지 않는 상황을 말합니다.
가시성 문제는 CPU 캐시, 컴파일러 최적화, 명령어 재ordering 등의 이유로 발생할 수 있습니다.
쓰레드 동기화에서 사용되는 wait(), notify(), notifyAll() 메서드의 역할은 무엇인가요?
wait() 메서드는 쓰레드를 일시 정지시키고 해당 객체의 Monitor를 해제합니다. 다른 쓰레드가 notify() 또는 notifyAll() 메서드를 호출하여 해당 객체의 Monitor를 획득하면, 일시 정지 중인 쓰레드 중 하나를 깨우고 실행 대기 상태로 전환합니다.
notify() 메서드는 대기 중인 쓰레드 중 하나를 선택하여 깨우고 실행 대기 상태로 전환시킵니다. notifyAll() 메서드는 대기 중인 모든 쓰레드를 깨웁니다.
쓰레드 동기화에서 경쟁 상태(Race Condition)는 어떤 상황에서 발생할 수 있나요?
경쟁 상태는 여러 쓰레드가 공유 자원에 동시에 접근하여 예상치 못한 결과를 가져오는 상황을 말합니다.
경쟁 상태는 공유 자원의 일관성을 깨뜨리고, 잘못된 결과나 예외 상황을 초래할 수 있습니다.
쓰레드 동기화에서 동기화 블록을 사용하는 이유는 무엇인가요?
동기화 블록은 동기화가 필요한 부분만을 지정하여 동기화를 수행할 수 있게 합니다.
동기화 블록을 사용하면 불필요한 동기화를 피하고, 성능을 향상시킬 수 있습니다.
쓰레드 동기화에서 비교적 경량화된 동기화 방법으로 알려진 것은 어떤 것이 있나요?
java.util.concurrent 패키지에 있는 ConcurrentHashMap, ConcurrentLinkedQueue 등의 자료구조는 동기화를 효율적으로 처리하는 경량화된 동기화 방법을 제공합니다.
이러한 동기화 방법은 성능을 향상시키면서 쓰레드 간의 안전한 데이터 공유를 가능하게 합니다.
쓰레드 동기화에서 사용되는 synchronized 블록과 synchronized 메서드의 차이는 무엇인가요?
synchronized 블록은 특정 코드 블록에 대한 동기화를 수행하는데 사용됩니다. 특정 객체나 클래스에 대한 Monitor를 획득하여 동기화를 수행합니다.
synchronized 메서드는 메서드 전체에 대한 동기화를 수행하는데 사용됩니다. 메서드가 호출될 때 해당 객체의 Monitor를 획득하여 동기화를 수행합니다.
쓰레드 풀(Thread Pool)이란 무엇인가요?
쓰레드 풀은 미리 생성된 쓰레드들의 집합으로, 작업을 처리할 때 재사용되는 쓰레드를 제공하는 기능입니다.
쓰레드 풀은 쓰레드의 생성과 제거에 드는 오버헤드를 줄이고, 쓰레드 생성에 따른 부하를 관리하여 효율적인 작업 처리를 위해 사용됩니다.
동기화(Synchronization)란 무엇이며, 왜 필요한가요?
동기화는 여러 쓰레드가 공유하는 자원에 대한 접근을 조절하는 메커니즘입니다.
여러 쓰레드가 동시에 자원을 수정하려고 할 때 데이터의 일관성을 보장하기 위해 동기화가 필요합니다.
쓰레드 동기화에서 동기화 메서드와 동기화 블록 중 어떤 것을 사용해야 할까요?
동기화 메서드는 메서드 전체를 동기화하므로 코드의 일관성과 가독성을 높여주지만, 메서드 내부의 일부분만 동기화해야 할 때는 동기화 블록을 사용하는 것이 좋습니다.
동기화 블록은 필요한 부분만을 지정하여 동기화하므로 세밀한 동기화 제어와 성능 향상을 기대할 수 있습니다.
쓰레드 동기화와 데드락(Deadlock)의 관계에 대해 설명해주세요.
쓰레드 동기화는 여러 쓰레드 간의 공유 자원 접근을 제어하여 데이터 일관성과 안전성을 보장하는데 사용됩니다.
하지만 잘못된 동기화로 인해 데드락이 발생할 수 있습니다. 데드락은 두 개 이상의 쓰레드가 서로가 점유한 자원을 대기하면서 아무런 진행도 이루어지지 않는 상태를 말합니다.
쓰레드 스케줄링이란 무엇인가요?
쓰레드 스케줄링은 운영체제가 여러 개의 쓰레드 중에서 실행할 쓰레드를 선택하는 것을 말합니다.
스케줄링 알고리즘은 쓰레드의 우선순위, 동작 시간 할당, 대기 상태 해결 등을 고려하여 결정됩니다.