🔍 스레드에서 생성된 메모리 영역은 다른 스레드에서 접근 가능할까요?
✅ 답변: 스레드가 생성한 메모리 영역이 어디에 저장되느냐에 따라 접근 가능 여부가 달라집니다.
📌 1. 접근 가능 (Heap 영역)
- 객체(인스턴스) 또는 static 변수는 Heap 메모리에 저장되므로, 다른 스레드에서 접근 가능.
- 여러 스레드가 같은 객체를 참조하면 공유 가능.
예제 (Heap 메모리에 저장된 객체를 여러 스레드에서 공유)
class SharedData {
int value = 0; // Heap에 저장됨 (모든 스레드 공유 가능)
}
public class ThreadExample {
public static void main(String[] args) {
SharedData data = new SharedData(); // Heap에 객체 생성
Runnable task = () -> {
data.value++; // 여러 스레드가 공유
System.out.println(Thread.currentThread().getName() + " → " + data.value);
};
Thread t1 = new Thread(task);
Thread t2 = new Thread(task);
t1.start();
t2.start();
}
}
✔ 같은 SharedData 객체를 여러 스레드에서 공유 가능
✔ Heap에 저장된 데이터는 모든 스레드가 접근 가능
❌ 하지만 동기화하지 않으면 Race Condition(데이터 충돌) 발생 가능
📌 2. 접근 불가능 (Stack 영역)
- 각 스레드의 Stack 메모리는 독립적.
- 지역 변수(메서드 내부 변수), 매개변수는 다른 스레드에서 접근할 수 없음.
예제 (Stack에 저장된 변수는 다른 스레드가 접근 불가능)
class Example {
void method() {
int localVar = 100; // Stack에 저장됨 (각 스레드마다 독립적)
}
}
✔ localVar 는 각 스레드마다 독립적으로 존재 → 다른 스레드에서 접근 불가능
📌 결론
메모리 영역다른 스레드 접근 가능 여부설명
메모리 영역 | 다른 스레드 접근 가능 여부 | 설명 |
Heap (힙 메모리) | ✅ 가능 | 객체(인스턴스) 및 static 변수 공유 가능 |
Stack (스택 메모리) | ❌ 불가능 | 지역 변수 및 메서드 매개변수는 스레드마다 독립적 |
📌 즉, Heap에 저장된 데이터는 다른 스레드에서 접근 가능하지만, Stack에 저장된 지역 변수는 다른 스레드에서 접근 불가능합니다! 🚀
반응형
'서버&백엔드 > 🔥 JAVA' 카테고리의 다른 글
Java | 스레드 순차적으로 실행하는 법 (0) | 2025.02.04 |
---|---|
힙 메모리 부족 문제 (0) | 2025.02.04 |
JAVA | 뮤텍스(Mutex) vs 세마포어(Semaphore) (0) | 2025.02.03 |
Java | 힙(Heap)과 스택(Stack) 메모리 (0) | 2025.02.03 |
Java 병렬 스트림(Parallel Stream) 사용 시 예상되는 문제와 해결 방법 (0) | 2025.02.03 |