언어/JSP

주니어 개발자를 위한 100가지 질문(답변 포함) - 3

몽스 2023. 10. 27. 19:04
728x90
반응형

3️⃣ multi-threading

 

📌 병렬과 동시성의 차이점을 말해주세요.

병렬처리(Parallelism)는 여러 개의 CPU 코어를 사용하여 여러 작업을 동시에 수행하는 것입니다. 반면에 동시성(Concurrency)는 단일 CPU 코어에서 여러 작업을 번갈아 가면서 수행하여 마치 동시에 처리되는 것처럼 보이게 하는 것입니다.

 

📌 스레드와 프로세스의 차이를 말해주세요.

프로세스는 운영 체제로부터 자원을 할당받아 실행하는 작업의 단위입니다. 각 프로세스는 독립된 메모리 영역을 가지며, 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신(IPC)을 사용해야 합니다. 반면에 스레드는 프로세스 내에서 실행되는 흐름의 단위로, 같은 프로세스 내의 스레드들은 해당 프로세스의 자원을 공유할 수 있습니다.

 

📌 데몬 스레드는 무엇인가요?

데몬 스레드는 주 스레드의 작업을 돕는 보조적인 역할을 하는 스레드입니다. 주 스레드가 종료되면 데몬 스레드도 함께 종료되며, 주로 백그라운드에서 실행되는 작업에 사용됩니다.

 

📌 스레드를 만드는 방법을 나열해주세요.

Thread 클래스를 상속받는 클래스를 만들고, run() 메서드를 오버라이드하는 방법

Runnable 인터페이스를 구현하는 클래스를 만들고, run() 메서드를 구현하는 방법

Callable 인터페이스를 구현하는 클래스를 만들고, call() 메서드를 구현하는 방법

 

📌 runnable과 callable의 차이는 무엇인가요?

Runnable과 Callable 인터페이스는 모두 스레드를 생성하기 위한 인터페이스입니다. 그러나 Runnable의 run() 메서드는 반환값이 없고, 예외를 던질 수 없습니다. 반면에 Callable의 call() 메서드는 결과를 반환할 수 있으며, 예외를 던질 수 있습니다.

 

📌 스레드의 여러가지 상태에 대해 말해주세요.

  • NEW: 스레드가 생성되었지만 아직 start() 메서드가 호출되지 않은 상태
  • RUNNABLE: 실행 중이거나 실행 가능한 상태
  • BLOCKED: 동기화 블록에 의해 일시 중지된 상태
  • WAITING: 다른 스레드로부터 특정 작업의 신호를 기다리는 상태
  • TIMED_WAITING: 지정된 시간 동안 대기하는 상태
  • TERMINATED: 작업을 모두 마친 상태

 

📌 sleep()과 wait()의 차이는 무엇인가요?

sleep() 메서드는 지정된 시간 동안 현재 스레드를 일시 중지시킵니다. 이 때, 스레드는 모니터링 락을 유지합니다. 반면에 wait() 메서드는 다른 스레드가 notify() 또는 notifyAll() 메서드를 호출할 때까지 현재 스레드를 대기 상태로 만듭니다. 이 때, 스레드는 모니터링 락을 해제합니다.

 

📌 notify()와 notifyAll()의 차이는 무엇인가요?

notify() 메서드는 대기 상태에 있는 스레드 중 하나에게 실행을 재개하라는 신호를 보냅니다. 반면에 notifyAll() 메서드는 대기 상태에 있는 모든 스레드에게 실행을 재개하라는 신호를 보냅니다.

 

📌 thread run()과 thread start()의 차이는 무엇인가요?

run() 메서드를 직접 호출하면 해당 스레드의 run() 메서드가 호출되는 스레드(일반적으로 메인 스레드)에서 실행됩니다. 즉, 새로운 스레드가 생성되지 않습니다. 반면에 start() 메서드를 호출하면 새로운 스레드가 생성되고, 이 새로운 스레드에서 run() 메서드가 실행됩니다.

 

📌 스레드 풀을 생성할 수 있는 여러가지 방법을 말해주세요.

  • 자바의 Executors 클래스는 다양한 종류의 스레드 풀을 생성할 수 있는 팩토리 메서드를 제공합니다.
  • newFixedThreadPool: 고정된 크기의 스레드 풀을 생성합니다.
  • newCachedThreadPool: 필요에 따라 새로운 스레드를 생성하는 스레드 풀을 생성합니다.
  • newSingleThreadExecutor: 단일 스레드로 작업을 처리하는 스레드 풀을 생성합니다.
  • newScheduledThreadPool: 스케줄링 기능을 제공하는 스레드 풀을 생성합니다.

 

📌 스레드 풀의 상태에 대해 말해주세요.

  • RUNNING: 작업을 수락하고 처리하는 상태
  • SHUTDOWN: 새로운 작업을 수락하지 않지만, 대기 중인 작업은 처리하는 상태
  • STOP: 새로운 작업을 수락하지 않고, 대기 중인 작업도 처리하지 않는 상태
  • TIDYING: 모든 작업이 종료되고 finalizer가 실행되는 상태
  • TERMINATED: 종료된 상태

📌 스레드 풀에서 submit()과 execute()의 차이는 무엇인가요?

submit() 메서드는 작업을 스레드 풀에 제출하고, 작업의 결과를 담은 Future 객체를 반환합니다. 반면에 execute() 메서드는 작업을 스레드 풀에 제출하지만, 작업의 결과를 반환하지 않습니다.

 

📌 자바 프로그램에서 멀티 스레드 작업의 안전성을 어떻게 보장할 수 있을까요?

  • synchronized 키워드: 메서드 또는 블록을 한 번에 하나의 스레드만 접근하도록 제한합니다.
  • volatile 키워드: 변수를 메인 메모리에 저장하여 모든 스레드가 동일한 값을 보도록 합니다.
  • Lock 인터페이스: 더 세밀한 동기화 제어를 가능하게 합니다.
  • Atomic 변수: 원자적 연산을 지원하는 변수를 제공합니다.

이외에도, 스레드 안전한 컬렉션, ReadWriteLock, CountDownLatch, Semaphore 등의 도구를 사용할 수 있습니다.

728x90
반응형