Java 스레드(Thread)와 Runnable 인터페이스
요약
Java에서 스레드를 생성하는 두 가지 방법(Thread 상속, Runnable 구현)을 알아봅니다. 정보처리기사 실기에 출제된 스레드 문제를 풀기 위한 핵심 개념을 정리합니다.
스레드 핵심 정리
| 개념 | 설명 | 예시 |
|---|---|---|
| 스레드 (Thread) | 프로그램 안에서 동시에 실행되는 작업 단위 | 음악 재생하면서 채팅하기 |
| Runnable 인터페이스 | run() 메서드를 구현하여 스레드 생성 | class Car implements Runnable |
| Thread 클래스 상속 | Thread를 상속받아 스레드 생성 | class Car extends Thread |
| start() | 스레드를 실행하는 메서드 | t1.start(); |
| run() | 스레드가 실행할 코드를 담는 메서드 | public void run() { } |
스레드란?
스레드(Thread) 는 프로그램 안에서 동시에 실행되는 작업 단위입니다.
보통 프로그램은 코드를 위에서 아래로 한 줄씩 실행합니다. 하지만 스레드를 사용하면 여러 작업을 동시에 처리할 수 있습니다.
예를 들어, 음악을 들으면서 채팅을 하는 앱은 "음악 재생" 스레드와 "채팅" 스레드가 동시에 실행되는 것입니다.
스레드 생성 방법 2가지
Java에서 스레드를 만드는 방법은 2가지입니다.
| 방법 | 키워드 | 핵심 |
|---|---|---|
| 방법 1: Runnable 인터페이스 구현 | implements Runnable | Thread 생성자에 객체 전달 |
| 방법 2: Thread 클래스 상속 | extends Thread | 직접 start() 호출 |
두 방법 모두 run() 메서드에 스레드가 실행할 코드를 작성하고, start()로 스레드를 실행합니다.

방법 1: Runnable 인터페이스 구현
인터페이스인 Runnable을 구현(implements)하는 방법입니다. 시험에 출제된 방식입니다.
단계별 과정
1단계: Runnable 인터페이스를 구현하는 클래스를 작성합니다.
Runnable은 Java가 제공하는 인터페이스입니다. "이 클래스는 스레드로 실행할 수 있다"는 의미입니다.
2단계: run() 메서드를 구현합니다.
run() 메서드는 Runnable 인터페이스가 요구하는 메서드입니다. 인터페이스를 구현하는 클래스는 인터페이스의 메서드를 반드시 구현해야 합니다.
3단계: Thread 객체를 생성할 때, Runnable 구현 클래스의 인스턴스를 전달합니다.
new Car()로 Car 객체를 만들고, 이것을 Thread 생성자에 전달합니다. Thread는 이 객체의 run() 메서드를 실행할 준비를 합니다.
4단계: start()로 스레드를 실행합니다.
start()를 호출하면 새로운 스레드가 만들어지고, 그 안에서 Car의 run() 메서드가 실행됩니다.
전체 코드
실행 흐름
| 순서 | 코드 | 설명 |
|---|---|---|
| 1 | new Car() | Runnable을 구현한 Car 객체 생성 |
| 2 | new Thread(new Car()) | Thread 객체 생성, Car 객체를 전달 |
| 3 | t1.start() | 새 스레드 시작 -> Car의 run() 실행 |
| 4 | run() 실행 | "run" 출력 |
방법 2: Thread 클래스 상속
Thread 클래스를 상속(extends)받는 방법입니다.
Thread를 상속받으면 Car 자체가 Thread이므로, new Thread()를 따로 만들지 않고 바로 start()를 호출할 수 있습니다.
두 가지 방법 비교
| 구분 | Runnable 구현 | Thread 상속 |
|---|---|---|
| 키워드 | implements Runnable | extends Thread |
| 스레드 생성 | new Thread(new Car()) | new Car() |
| 스레드 실행 | t1.start() | t1.start() |
| run() 구현 | 필수 | 필수 |
| 다른 클래스 상속 | 가능 (인터페이스는 여러 개 구현 가능) | 불가능 (Java는 단일 상속) |
시험 문제 풀이 전략
핵심 패턴 외우기
빈칸 문제 풀이법
- 클래스 선언부에서
implements Runnable또는extends Thread를 확인합니다 implements Runnable이면 ->new Thread(new 클래스명())extends Thread이면 ->new 클래스명()