멀티스레드 환경에서 동시성 문제

참치돌고래·2022년 6월 20일
0

자바 이것저것

목록 보기
3/3

서블릿 컨테이너는 각 인스턴스가 싱글톤이 되는 것을 보장한다.

즉, 멀티스레드 환경에서는 여러명의 사용자가 인스턴스를 재사용한다.

JVM -> 스택, 힙 영역으로 나누어 메모리 관리

  • 스택 : 각 쓰레드마다 서로 다른 스택 영역 소유, 관리
  • 힙 : 클래스의 인스턴스 상태 관리, 각 스레드가 공유하는 공간

<스택>
각 메소드별로 스택 프레임 생성.
어떤 특정 메소드가 실행되면 스택 프레임의 로컬 변수 영역 첫번째 위치에
자기자신에 대한 위치가 저장.

<힙>
자기 자신을 가리키는 인스턴스를 따라가면 힙에 싱글톤으로 생성되어 있는 것을 확인.
여러개의 쓰레드에서도 단 하나의 인스터스를 따라가게 되고, 상태를 공유하게 됨.

해결하기 위해, ThreadLocal을 사용하거나 메소드안에서 필드를 생성.

메소드 안에서 생성하게 되면 전체적인 인스턴스는 힙에서 단 하나 생성되지만, 인스턴스의 상태를 힙에서 공유하지 않게 된다.

profile
안녕하세요

0개의 댓글