---
description: 쓰레드
---

# Week3(2/2) Threads

## Java에서 스레드를 만드는 방법을 설명해 주세요.

자바에서 스레드를 만드는 방법에는 두 가지가 있습니다.&#x20;

* 첫 번째는 `Thread` 클래스를 상속받아 `run()` 메서드를 오버라이딩하는 방법&#x20;
* 두 번째는 `Runnable` 인터페이스를 구현하여 `run()` 메서드를 정의한 후, 이를 `Thread` 객체에 전달하는 방법입니다. 다른 클래스를 상속받을 수 있기때문에 확장성이 높다.



## &#x20;Runnable과 Callable의 차이는 무엇인가요?

Runnable과 Callable은 자바에서 멀티스레딩을 구현할 때 사용되는 인터페이스입니다.&#x20;

* Runnable은 반환값이 없고, 예외를 던질 수 없다.&#x20;
* Callable은 값을 반환할 수 있으며, 체크 예외를 던질 수 있습니다.&#x20;

Runnable은 단순한 작업을 실행할 때, Callable은 작업 결과나 예외 처리가 필요한 경우에 사용됩니다.



## &#x20;sleep()과 wait()의 차이는 무엇인가요?

sleep()과 wait()는 자바에서 스레드의 실행을 일시적으로 멈추는 데 사용되지만, 목적과 동작 방식이 다릅니다.&#x20;

* sleep()은 스레드를 일정 시간 동안 일시 정지시키는 데 사용되며, 모니터 락을 해제하지 않습니다.
* wait()는 스레드가 다른 스레드의 신호를 기다리기 위해 대기 상태에 들어가는 메서드로, 모니터 락을 해제하고 **synchronized** 블록 내에서만 사용할 수 있습니다.



## 스레드 풀이란 무엇이고, 왜 사용할까요?

스레드 풀(Thread Pool)은 미리 생성된 스레드들의 집합으로, 새로운 작업이 들어올 때마다 스레드 풀에서 스레드를 할당해 작업을 처리합니다. 스레드 풀을 사용하면 새로운 스레드를 생성하는 비용을 줄이고, 자원을 효율적으로 관리할 수 있으며, 시스템의 안정성을 높일 수 있습니다.
