2025년 7월 28일 월요일(44일차)

Jeonghoon·2025년 7월 28일

jeonghoon's Study

목록 보기
46/128

🧵 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와 다른 환경을 익히며 오류 방지 필요
❤️ 느낀 점협업은 기술보다 정확한 커뮤니케이션과 역할 분담이 핵심

0개의 댓글