기본적인 쓰레드 생성 및 실행
쓰레드는 프로그램이 동시에 여러 작업을 수행할 수 있도록 해줍니다.
우선, 싱글 쓰레드와 멀티 쓰레드의 차이를 알아보기 위해 간단한 실습을 해볼게요.
실습 1: 싱글 쓰레드 vs 멀티 쓰레드 비교
🔹 아래 코드를 실행한 후 결과를 비교해 보세요!
public class SingleVsMultiThread {
public static void main(String[] args) {
Runnable task = () -> {
for (int i = 1; i <= 5; i++) {
System.out.println(Thread.currentThread().getName() + " 실행 중: " + i);
}
};
System.out.println("🔵 [싱글 쓰레드 실행]");
task.run(); // 싱글 쓰레드 실행
System.out.println("\n🔴 [멀티 쓰레드 실행]");
Thread thread = new Thread(task);
thread.start(); // 멀티 쓰레드 실행
}
}
Runnable을 사용하여 멀티 쓰레드 구현
- 일반적으로 Java에서 멀티 쓰레드를 만들려면 두 가지 방법
- Thread 클래스를 상속하는 방법
- Runnable 인터페이스를 구현하는 방법 (이 코드에서 사용한 방법)
- 여기서는 Runnable 인터페이스를 구현하여 쓰레드를 실행할 작업을 정의
Runnable을 일반 클래스로 구현
class MyRunnable implements Runnable {
@Override
public void run() {
for (int i = 1; i <= 5; i++) {
System.out.println(Thread.currentThread().getName() + " 실행 중: " + i);
}
}
}
public class RunnableExample {
public static void main(String[] args) {
Thread thread1 = new Thread(new MyRunnable());
Thread thread2 = new Thread(new MyRunnable());
thread1.start();
thread2.start();
}
}
Runnable 객체를 따로 만들지 않고, 람다 표현식(→)으로 간단하게 정의
public class LambdaThreadExample {
public static void main(String[] args) {
Thread thread1 = new Thread(() -> {
for (int i = 1; i <= 5; i++) {
System.out.println(Thread.currentThread().getName() + " 실행 중: " + i);
}
});
thread1.start();
}
}
싱글 쓰레드 실행 (run() vs start())
- run()을 직접 호출하면 쓰레드가 생성되지 않음.
- run() 메서드는 단순히 현재 쓰레드에서 실행될 뿐이므로, 멀티 쓰레드가 아니라 일반적인 메서드 실행과 동일함.
멀티 쓰레드 실행 (Thread 생성 후 start())
- tart()를 호출하면 JVM이 자동으로 새로운 쓰레드를 실행
start()를 사용해야 하는 이유
- run()을 직접 호출하면 현재 쓰레드에서 실행
- start()를 호출하면 새로운 쓰레드가 생성되고 실행
| 메서드 | 동작 방식 | 실행 방식 |
| run() | 일반 메서드 호출 | 현재 쓰레드에서 실행됨 (멀티 쓰레드 X) |
| start() | JVM이 새로운 쓰레드 생성 | 새로운 쓰레드에서 실행됨 (멀티 쓰레드 O) |
'JAVA' 카테고리의 다른 글
| Executor 프레임워크 (0) | 2025.03.12 |
|---|---|
| 쓰레드 동기화 (Synchronization) (3) | 2025.03.11 |
| Java Stream API 주요 메서드 정리 (2) | 2025.02.28 |
| 자바 기본 다지기 최종 (2) | 2025.02.27 |
| 자바 기초 문법 다지기 4 (1) | 2025.02.26 |