JAVA 80%

Thread

lshjju 2026. 1. 31. 21:41

여러 작업을 동시에(Parallel) 처리하는 **쓰레드(Thread)**



📘 쓰레드: "프로그램 속의 작은 일꾼"

1. Process (프로세스: 공장 전체)

  • 설명: 실행 중인 프로그램 그 자체를 의미합니다.
  • 비유: 윈도우 작업 관리자에서 보이는 하나하나의 프로그램이 프로세스입니다. 공장 건물 전체라고 생각하면 쉽습니다.

2. Main Thread (메인 쓰레드: 공장장)

  • 설명: 자바 프로그램이 시작되자마자 가장 먼저 실행되는 일꾼입니다.
  • 비유: public static void main(String[] args) 메서드를 실행하는 주체로, 공장을 가동하는 첫 번째 일꾼입니다.

3. Task Thread (작업 쓰레드: 추가 고용된 일꾼)

  • 설명: 메인 쓰레드 외에 별도로 생성하여 특정 작업을 맡기는 일꾼입니다.
  • 비유: 메인 쓰레드가 UI를 담당한다면, 작업 쓰레드는 배경에서 음악을 재생하거나 파일을 다운로드하는 보조 역할을 수행합니다.

4. Multi thread (멀티 쓰레드: 협업 시스템)

  • 설명: 하나의 프로세스 내에서 여러 개의 쓰레드가 동시에 가동되는 상태입니다.
  • 장점: 대기 시간이 긴 작업을 하는 동안 다른 작업을 멈추지 않고 계속할 수 있어 효율적입니다.

📦 쓰레드 생성과 실행 예제

자바에서 일꾼(Thread)을 고용하는 가장 쉬운 방법입니다.

Java
 
public class ThreadExample {
    public static void main(String[] args) {
        // 1. 작업 쓰레드(Task Thread) 생성
        Thread taskThread = new Thread(() -> {
            for (int i = 1; i <= 5; i++) {
                System.out.println("보조 일꾼 작업 중: " + i);
                try { Thread.sleep(500); } catch (InterruptedException e) {}
            }
        });

        // 2. 작업 시작! (일꾼 투입)
        taskThread.start();

        // 3. 메인 쓰레드(Main Thread)의 작업
        for (int i = 1; i <= 5; i++) {
            System.out.println("메인 공장장 업무 중: " + i);
            try { Thread.sleep(500); } catch (InterruptedException e) {}
        }
    }
}

🔒 Synchronized Method (동기화 메서드: 화장실 자물쇠)

여러 일꾼이 하나의 도구(데이터)를 동시에 쓰려고 하면 사고가 날 수 있습니다. 이를 방지하는 것이 synchronized 키워드입니다.

  • 상황: 두 명의 일꾼이 같은 통장에서 돈을 동시에 인출하려고 할 때!
  • 설명: 한 쓰레드가 이 메서드를 사용하는 동안 다른 쓰레드는 밖에서 기다리게 만듭니다.
Java
 
class BankAccount {
    private int balance = 1000;

    // synchronized를 붙이면 한 번에 한 쓰레드만 이 메서드에 들어옵니다.
    public synchronized void withdraw(int amount) {
        if (balance >= amount) {
            try { Thread.sleep(100); } catch (InterruptedException e) {}
            balance -= amount;
            System.out.println("인출 성공! 현재 잔액: " + balance);
        } else {
            System.out.println("잔액 부족!");
        }
    }
}

👨‍🏫 쉽게 이해하는 핵심 포인트

  1. start()와 run()의 차이: 일꾼에게 일을 시킬 때는 반드시 start()를 불러야 합니다. run()을 부르면 새 일꾼이 생기는 게 아니라 공장장(Main Thread)이 직접 그 일을 해버립니다.
  2. 동기화(synchronized)의 필요성: 멀티 쓰레드 환경에서는 데이터의 안전이 최우선입니다. 하지만 너무 남발하면 일꾼들이 서로 기다리느라 속도가 느려질 수 있으니 꼭 필요한 곳에만 써야 합니다.

오늘의 요약

  • Process는 프로그램 전체, Thread는 그 안의 작업 단위이다.
  • Main Thread는 기본 일꾼이며, 추가로 Task Thread를 만들 수 있다.
  • 여러 일꾼이 공유 데이터를 만질 때는 **synchronized**로 자물쇠를 채워야 안전하다.

이제 프로그램에 생동감을 불어넣는 멀티 쓰레드 기법을 이해하셨습니다!


'JAVA 80%' 카테고리의 다른 글

I/0 API  (0) 2025.11.06
Decorator Stream  (0) 2025.11.06
I/O Stream  (0) 2025.11.06
LIFO/FIFO collection - Stack - Queue  (0) 2025.11.06
Collection framework  (0) 2025.11.05