멋사 부트캠프/Java 프로그래밍
15. Thread
cTosMaster
2025. 4. 14. 12:37
✅ 기본 정리
1) 직렬 처리 (순차 처리 / Sequential Processing)
- 하나의 작업이 끝나야 다음 작업 시작. CPU는 한 번에 한 가지 일만 처리함.2)
2) 병렬 처리 (병렬 프로세싱 / Parallel Processing)
- 여러 작업을 동시에 처리. 여러 스레드 또는 프로세서가 동시에 일함.
✅ 기본 구문
// 동기화 기초 - synchronized 메서드 사용
public class e_SynchronizationBasic {
public static void main(String[] args) throws InterruptedException {
//람다식에서 외부 변수를 참조할 때 final 이어야 한다.
final int[] count = {0};
Runnable incrementTask = () -> {
for (int i = 0; i < 1000; i++) {
// 2개의 스레드가 동시에 count에 접근하여 각각 1씩 증가시키려 할 때,
// 실제로는 총 2 증가해야 하지만, 결과가 1만 증가할 수 있음.
// 이러한 문제를 **Race Condition(경쟁 상태)**라고 하며,
// 이를 방지하기 위해 **synchronized(LOCK)**을 사용하여
// 스레드가 순차적으로 접근하도록 만든다.
synchronized (count) {
count[0]++;
}
}
};
Thread thread1 = new Thread(incrementTask);
Thread thread2 = new Thread(incrementTask);
thread1.start();
thread2.start();
//메인 스레드가 2개의 일반 스레드가 다 끝날때 까지 기다림.
thread1.join();
thread2.join();
System.out.println("Final Count: " + count[0]);
}
}
✅