JAVA

쓰레드(Thread)

도원좀비 2025. 3. 11. 20:56

기본적인 쓰레드 생성 및 실행

쓰레드는 프로그램이 동시에 여러 작업을 수행할 수 있도록 해줍니다.
우선, 싱글 쓰레드와 멀티 쓰레드의 차이를 알아보기 위해 간단한 실습을 해볼게요.

 

실습 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에서 멀티 쓰레드를 만들려면 두 가지 방법
    1. Thread 클래스를 상속하는 방법
    2. 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