스레드는 Stack을 제외한 Heap 메모리와 Method Area 메모리 공간을 공유한다.
각 스레드는 자기 자신의 Stack Memory를 가지고 있으며, 스레드끼리 Stack Memory 공간을 침범할 수 없다.
인스턴스 변수나 정적 변수는 스레드가 공유할 수 있으나, 메서드 내 지역 변수는 Thread Stack에서 사용되므로 다른 스레드와 공유할 수 없다.
로컬 변수는 메서드 내부에 선언된 변수처럼 Stack에 일시적으로 할당된 후 사용하고 소멸되는 변수를 말한다.
인스턴스 변수는 소멸하지 않는 한 모든 스레드에서 접근이 가능하므로 값이 변경될 경우 변경된 값을 읽을 수 있다. Heap 메모리를 공유하기 때문에 참조값을 통해 인스턴스에 접근할 수 있기 때문이다.
'Dev > Java' 카테고리의 다른 글
『Java』 Java 8, Stream 기본 (1) | 2024.11.24 |
---|---|
『Java』 내부 클래스, 정적 중첩 클래스, 지역 클래스, 익명 클래스 (0) | 2024.11.24 |
『Java』 HashMap은 어떤 원리로 동작하는가 (0) | 2024.11.22 |
『Java』 상속보다 컴포지션을 사용해야 하는 이유 (0) | 2024.11.20 |
『Java』 for-each 문을 사용하기 위한 인터페이스는 무엇인가? (0) | 2024.11.19 |