🧵 Thread · MultiThread · 동기화 · 스레드풀 · 팀프로젝트 1일차 정리
⚙️ [ Thread (스레드) ]
하나의 프로세스 내에서 실행되는 작업 단위로, 코드 명령을 읽고 CPU가 이를 처리하는 실행 흐름의 기본 단위
| 항목 | 설명 |
|---|
| 📘 정의 | 하나의 프로세스 내에서 실행되는 작업 단위 |
| ⚙️ 역할 | 코드(명령어)를 읽고 CPU가 처리 |
| 💡 예시 | 메인 스레드 외에도 여러 스레드가 동시에 실행될 수 있음 |
🔄 [ Multi Thread (멀티 스레드) ]
하나의 프로그램(프로세스) 안에서 여러 작업을 동시에 수행할 수 있도록 하는 기술
| 항목 | 설명 |
|---|
| 📘 정의 | 메인 스레드 외의 추가 스레드를 생성하여 병렬로 작업 수행 |
| 🎯 목적 | 병렬처리 및 작업 효율 향상 |
| 💻 사용처 | 웹/앱, 동기화/비동기 처리, 채팅, JDBC 등 |
🧠 구현 방법
| 방법 | 설명 | 예시 코드 |
|---|
| 🧩 익명 구현체 사용 | Runnable 인터페이스를 직접 구현 | Thread t = new Thread(new Runnable(){ public void run(){} }); |
| 🧱 구현 클래스 사용 | Runnable을 구현한 클래스를 Thread에 전달 | Thread t = new Thread(new MyRunnable()); |
| 🪜 상속 방식 | Thread를 상속받아 run() 재정의 | class MyThread extends Thread { public void run(){} } |
⚙️ 주요 구성요소
| 클래스/인터페이스 | 주요 메소드 | 설명 |
|---|
Thread | .start() | 구현된 run() 메소드를 실행 |
Runnable | .run() | 작업 스레드의 시작점 |
🔐 [ 동기화 / 비동기화 ]
여러 스레드가 하나의 객체를 동시에 사용할 때 충돌을 방지하기 위한 기술
| 구분 | 설명 | 특징 |
|---|
| 🔒 동기화 (Synchronized) | 한 번에 하나의 스레드만 접근 가능 | 순서 보장 / 충돌 방지 |
| ⚡ 비동기화 (Asynchronous) | 여러 스레드가 동시에 접근 가능 | 빠르지만 충돌 가능성 있음 |
⚙️ 구현 방법
| 방법 | 코드 예시 |
|---|
| 메소드 전체 동기화 | public synchronized void method() { ... } |
| 블록 동기화 | synchronized(this) { ... } |
💡 주의점
- 비동기화 시 여러 스레드가 하나의 객체를 사용할 경우 충돌 위험 존재
- 동기화를 통해 코드의 무결성 보장 가능
🧩 [ 스레드풀 (Thread Pool) ]
스레드를 매번 새로 생성하지 않고, 미리 일정 개수를 만들어 재사용하는 방식
| 항목 | 설명 |
|---|
| 📘 정의 | 미리 일정 개수의 스레드를 생성해 재사용 |
| ⚙️ 방식 | 새로운 스레드 대신 기존 스레드를 재활용 |
| 💡 효과 | 자원 효율성 향상, 시스템 과부하 방지 |
🧱 구조
스레드풀은 ‘큐(Queue)’ 자료구조를 사용해 작업 요청을 관리한다.
| 자료구조 | 설명 |
|---|
| 🧩 큐 (Queue) | 선입선출(FIFO) 구조, 요청 순서대로 처리 |
| 🪜 스택 (Stack) | 후입선출(LIFO) 구조, 최근 요청부터 처리 |
⚙️ 사용법
ExecutorService pool = Executors.newFixedThreadPool(3);
pool.submit(new MyThread());
pool.shutdown();
| 메소드 | 설명 |
|---|
newFixedThreadPool(n) | n개의 스레드를 가진 풀 생성 |
.submit(스레드) | 스레드를 풀에 등록 |
.shutdown() | 스레드풀 종료 |
💡 특징
1️⃣ 스레드의 실행 순서는 지정 불가능
2️⃣ 스레드풀의 크기만큼 스레드가 순환 실행됨
🧠 [ 동기화 / 비동기화 비교표 ]
| 구분 | 동기화 (Synchronized) | 비동기화 (Asynchronous) |
|---|
| ⚙️ 처리 방식 | 순차 처리 | 병렬 처리 |
| 🧩 처리 속도 | 느림 | 빠름 |
| 🔐 충돌 가능성 | 없음 | 있음 |
| 🔁 처리 순서 | 호출 순서 보장 | 완료 순서대로 |
| 💻 사용 예시 | 은행 송금, 데이터 일관성 작업 | 채팅, 실시간 알림 |
👥 [ 팀프로젝트 1일차 회고 ]
프로젝트 시작 단계에서의 주제 선정과 팀 협업 과정 회고
| 항목 | 내용 |
|---|
| 💡 주제 고민 | “수강신청 시스템” vs “프랜차이즈 관리 시스템” |
| ⚙️ 결정 배경 | 수강신청은 테이블이 제한적 → 프랜차이즈 관리 시스템으로 결정 |
| 🧱 학습 기회 | 사회 경험이 풍부한 팀원으로부터 규격, 폴더 관리 등 실무 팁 습득 |
| 🧠 담당 역할 | Git 관리 담당 → VSCode와 다른 환경을 익히며 오류 방지 필요 |
| ❤️ 느낀 점 | 협업은 기술보다 정확한 커뮤니케이션과 역할 분담이 핵심 |