728x90
안녕하세요.
오늘은 java에서 멀티스레드를 구현하는 방법 중 Thread와 Runnable 의 차이에 대해 알아보겠습니다.
먼저 두 가지 방식은 다음과 같습니다.
1. Thread 클래스를 상속하는 방법
2. Runnable 인터페이스를 구현하는 방법
이 두 방법은 겉으로는 비슷해 보이나, 확장성, 코드구조, 사용목적에 차이가 있습니다.
1. Thread
- Thread 클래스를 상속하는 방법
- 다른 클래스를 상속할 수 없음
- 코드 재사용성이 낮음 (같은 로직을 다른 곳에서 재사용하려면 Thread 를 다시 만들어야 함)
- 객체 공유가 불가능함 (각 Thread 객체가 독립적임, Thread 인스턴스 자체가 실행됨)
class MyThread extends Thread {
private int count = 0;
public void run() {
for (int i = 0; i < 5; i++) {
count++;
System.out.println(Thread.currentThread().getName() + " - count: " + count);
}
}
}
public class Main {
public static void main(String[] args) {
MyThread t1 = new MyThread();
MyThread t2 = new MyThread();
t1.start();
t2.start();
}
}
위 코드를 보며 아래와 같이 확인할 수 있습니다.
- MyThread는 Thread를 상속했기 때문에 다른 클래스를 상속할 수 없음 (Java는 다중 상속이 불가능함).
- t1과 t2는 각각 독립적인 Thread 객체이므로 count 값이 공유되지 않음 ( Thread 자체가 실행 단위라 객체를 여러 스레드에서 공유할 수 없음)
- 같은 로직을 다른 클래스에서 재사용하려면 또 다른 Thread 클래스를 만들어야 함.
2. Runnable
- Runnable 인터페이스를 구현하는 방법
- 다른 클래스 상속 가능
- 코드 재사용성 높음(다른 클래스에서도 사용 가능)
- 객체 공유 가능 (Runnable 객체를 여러 스레드에서 공유 가능)
class MyRunnable implements Runnable {
private int count = 0;
public void run() {
for (int i = 0; i < 5; i++) {
count++;
System.out.println(Thread.currentThread().getName() + " - count: " + count);
}
}
}
public class Main {
public static void main(String[] args) {
MyRunnable task = new MyRunnable(); // 하나의 객체 생성
Thread t1 = new Thread(task); // 같은 객체를 공유하는 스레드
Thread t2 = new Thread(task);
t1.start();
t2.start();
}
}
위 코드를 보며 아래와 같이 확인할 수 있습니다.
- 객체(task)를 공유할 수 있어, 데이터 공유 가능함
- 코드 재사용성이 높음 (다른 클래스에서도 MyRunnable을 쉽게 활용 가능).
- 다른 클래스를 상속할 수 있어 확장성이 좋음
이러한 특징들을 고려하면서 멀티스레딩 구현 시 필요에 맞게 활용하시기 바랍니다!
'Java' 카테고리의 다른 글
[Java] 스레드를 활용해서 여러 파일 동시에 다운로드 받기 (2) | 2025.03.06 |
---|---|
[JAVA] JVM 메모리 구조 알아보기 (2) | 2025.03.02 |
[JAVA] WeakReference, SoftReference 사용법 (2) | 2025.02.23 |
[JAVA] 자바 인텔리제이에서 DB 데이터베이스 접속하기 (0) | 2024.08.27 |
[JAVA] 인텔리제이 IntelliJ IDEA JAR 파일 생성/ 만들기 (0) | 2024.08.21 |