여러 작업을 동시에(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("잔액 부족!");
}
}
}
👨🏫 쉽게 이해하는 핵심 포인트
- start()와 run()의 차이: 일꾼에게 일을 시킬 때는 반드시 start()를 불러야 합니다. run()을 부르면 새 일꾼이 생기는 게 아니라 공장장(Main Thread)이 직접 그 일을 해버립니다.
- 동기화(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 |