반응형
멀티스레드 프로그래밍은 자바의 핵심 기능 중 하나.
특히 백엔드 개발에서 동시성 처리, 대용량 작업 분산, 비동기 실행 등을 구현할 때 필수적인 기술.
이 글에서는 자바에서 스레드가 어떻게 작동하는지, 그리고 실무에서 어떻게 다뤄야 하는지 간단한 이론 중심으로 정리.
1. 스레드란?
스레드는 프로세스 내에서 실행되는 독립적인 작업 단위입니다.
자바 애플리케이션은 기본적으로 하나의 main 스레드로 시작하며, 추가 작업을 위해 여러 개의 스레드를 생성 가능.
하나의 프로세스 → 여러 개의 스레드로 나뉘어 병렬 작업 수행
2. 스레드 방법
a. Thread 클래스 상속
class MyThread extends Thread {
public void run() {
System.out.println("Hello from thread!");
}
}
new MyThread().start(); // run()이 아닌 start() 호출
b. Runnable 인터페이스 구현
class MyRunnable implements Runnable {
public void run() {
System.out.println("Runnable 실행!");
}
}
new Thread(new MyRunnable()).start();
3. 스레드 생명주기
New → Runnable → Running → Terminated
↓
Blocked
- New: 생성되었지만 아직 start() 호출 전
- Runnable: 실행 준비 완료 (CPU 할당 대기)
- Running: CPU를 받아 실행 중
- Blocked / Waiting: I/O 등으로 대기 상태
- Terminated: 실행 완료 or 예외 종료
4. 동기화와 경쟁조건
멀티스레드 환경에서는 여러 스레드가 동시에 하나의 자원에 접근할 수 있어 데이터 충돌이 발생(Race Condition)
>> synchronized로 해결
public synchronized void increment() {
count++;
}
synchronized 키워드는 해당 블록/메서드를 한 번에 하나의 스레드만 실행하게 만들어 줌.
하지만 과도한 사용은 성능 저하로 이어지므로 꼭 필요한 부분에만 적용해야 함.
5. 데드락
: 서로 다른 스레드가 자원을 점유한 채 서로가 가진 자원을 기다리는 상황 >> 프로그램 멈춤
반응형
'STUDY > JAVA' 카테고리의 다른 글
| Document base [파일경로]does not exist or is not a readable directory at org.apache.naming.resources.FileDirContext.setDocBase (0) | 2025.02.13 |
|---|---|
| myBatis 로 oracle에 배열데이터 foreach 사용해 한 컬럼에 넣기 (0) | 2024.12.19 |
| 추상클래스(Abastract) 개념 및 예제 (1) | 2022.10.28 |
| 열거타입(Enumeration type) (0) | 2022.10.27 |
| string 배열 비교(참조타입 배열 비교) (0) | 2022.10.27 |