본문 바로가기
Language/JAVA

[자바 멀티스레딩] 스레드 기초: Thread 클래스와 Runnable 인터페이스

by YoonJong 2025. 3. 26.
728x90
반응형

스레드

- 프로세스 내에서 실행되는 작업의 단위

- CPU를 활용해서 여러 작업을 동시에 처리 가능

- Java에서는 스레드를 통해 멀티태스킹 구현 가능

 

Thead 클래스

- 자바에서 스레드를 직접 생성하는 기본 방법 

- Thread를 상속ㅂ다아 run() 메서드를 오버라이드

 

Runnable 인터페이스

- 스레드 실행 로직을 분리해서 정의하는 방법

- run() 메서드만 구현하면 되고, 더 유연하게 사용 가능 (다중 상속)

 

public class Task1 {

    static class MyThread extends Thread {

        @Override
        public void run() {
            for (int i = 0; i < 10; i++) {
                System.out.println("Thread > Hello, Thread!");
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    static class MyRunnable implements Runnable {

        @Override
        public void run() {
            for (int i = 0; i < 10; i++) {
                System.out.println("Runnable > Hello, Thread!");
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    public static void main(String[] args) throws InterruptedException {
        MyThread thread1 = new MyThread();
        Thread thread2 = new Thread(new MyRunnable());

        thread1.start();
        thread2.start();

        // 모든 스레드 끝날때까지 종료
        thread1.join();
        thread2.join();

        System.out.println("모든 스레드 종료");
    }

}


// 결과값
Thread > Hello, Thread!
Runnable > Hello, Thread!
Runnable > Hello, Thread!
Thread > Hello, Thread!
Runnable > Hello, Thread!
Thread > Hello, Thread!
Runnable > Hello, Thread!
Thread > Hello, Thread!
Runnable > Hello, Thread!
Thread > Hello, Thread!
Runnable > Hello, Thread!
Thread > Hello, Thread!
Runnable > Hello, Thread!
Thread > Hello, Thread!
Runnable > Hello, Thread!
Thread > Hello, Thread!
Runnable > Hello, Thread!
Thread > Hello, Thread!
Runnable > Hello, Thread!
Thread > Hello, Thread!
모든 스레드 종료

 

- 스레드 종료 대기 (join) 을 하지 않으면 main 메서드가 바로 끝나버리게 되면 스레드가 다 실행되기 전에 프로그램이 종료될 수 있다.

728x90
반응형

댓글