Java 기초 정리 - 쓰레드 (Thread)

Zyoon·2025년 4월 15일

Java 기초정리

목록 보기
16/24
post-thumbnail

💡Thread의 사용 이유와 사용법


Thread


📘 프로그램 코드를 이용하면서 실행하는 하나의 실 혹은 제어의 개념.

  1. 프로세스와 프로그램의 차이
    • 프로그램 → 실행 가능한 파일
    • 프로세스 → 실행 중인(Running) 프로그램(메모리)

  1. 쓰레드
    • 프로세스 : 쓰레드 = 공장 : 일꾼
    • 프로세스 내에서 실제 작업을 수행한다.
    • 모든 프로세스는 하나 이상의 쓰레드를 가지고 있다.

  1. 멀티 쓰레드 구현

    // Runnable 인터페이스를 이용해 Thread 부분 구현 
    public class MyRunnable implements Runnable {
        //쓰레드 로직 부분 - 0 ~ 3 까지 숫자 생성
        @Override
        public void run() {
            String threadName = Thread.currentThread().getName();
            for (int i = 0; i < 3; i++) {
                System.out.println("현재 쓰레드 : " + threadName + " - " + i);
            }
        }
    }
    //main 부분 구현
    public static void main(String[] args) {
    		System.out.println("::: main 쓰레드 시작 ");
    
        //이 구현체로는 실행로직 역할
        MyRunnable myTask = new MyRunnable();
    
        //쓰레드는 쓰레드 제어 역할만
        Thread thread0 = new Thread(myTask);
        Thread thread1 = new Thread(myTask);
    
    		//쓰레드 시작 부분 - run() 작업부분 실행
        thread0.start();
        thread1.start();
    
        System.out.println("::: main 쓰레드 종료 ");   
    }
    출력
    ::: main 쓰레드 시작 
    ::: main 쓰레드 종료 
    현재 쓰레드 : Thread-1 - 0
    현재 쓰레드 : Thread-1 - 1
    현재 쓰레드 : Thread-0 - 0
    현재 쓰레드 : Thread-0 - 1
    현재 쓰레드 : Thread-1 - 2
    현재 쓰레드 : Thread-0 - 2
    • [main, thread0, thread1] 부분이 병렬로 실행

  1. join() 메서드 활용

    • join() : 특정 쓰레드가 끝날 때까지 기다리는 메서드
    • try-catch 로 감싸주어야 함
    //위의 main 부분에 join() 추가
    public static void main(String[] args) {
    		System.out.println("::: main 쓰레드 시작 ");
    
        //이 구현체로는 실행로직 역할
        MyRunnable myTask = new MyRunnable();
    
        //쓰레드는 쓰레드 제어 역할만
        Thread thread0 = new Thread(myTask);
        Thread thread1 = new Thread(myTask);
    
    		//쓰레드 시작 부분 - run() 작업부분 실행
        thread0.start();
        thread1.start();
        
        try {
            thread0.join();
            thread1.join();
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
    
        System.out.println("::: main 쓰레드 종료 ");   
    }
    출력
    ::: main 쓰레드 시작 
    현재 쓰레드 : Thread-0 - 0
    현재 쓰레드 : Thread-0 - 1
    현재 쓰레드 : Thread-1 - 0
    현재 쓰레드 : Thread-1 - 1
    현재 쓰레드 : Thread-0 - 2
    현재 쓰레드 : Thread-1 - 2
    ::: main 쓰레드 종료 
    • join() 부분이 끝날때까지 기다렸다가 main 이후 부분 실행
profile
기어 올라가는 개발

0개의 댓글