inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 핵심 원리 - 고급편

ThreadLocal - 예제 코드

저장 순서

해결된 질문

122

임종민

작성한 질문수 7

0

=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]
여기에 질문 내용을 남겨주세요.

강의에서 sleep을 주석 처리하고나서

실행결과가 처음엔 B -> A로 나오더라고요
재실행했을 땐 A -> B 순서로 잘 나옵니다


그래서 주석을 다시 풀고 실행한 뒤
다시 주석 적용하고 실행시키니까
처음만 B -> A 순서로 나오고
그 뒤로는 A -> B 로 나오더라고요
신기해서 질문남겨봅니다

spring 디자인-패턴

답변 2

0

김영한

안녕하세요. 임종민님

처음 실행했을 때 B -> A 순서로 나온 것은 그 시점의 운영체제 스케줄러가 thread-B에게 먼저 CPU 시간을 할당했기 때문일 수 있습니다. 시스템 상태, 백그라운드 작업, JVM 내부 요인 등 다양한 이유로 첫 실행 시 스케줄링이 특정 방식으로 결정될 수 있습니다. 하지만 이후에 다시 실행했을 때 A -> B 순서가 일관되게 나왔다면, 이는 해당 프로그램의 특성(간단하고 실행 시간이 짧음)과 특정 실행 환경(운영체제, 하드웨어, JVM 버전 등)에서 스케줄러가 해당 스레드들에게 비교적 일관된 순서로 CPU 시간을 할당하는 경향을 보인 결과일 수 있습니다.

결론적으로, 스레드 실행 순서는 비결정적(non-deterministic)이며 실행 환경에 따라 달라질 수 있습니다. 특정 실행 순서(예: A 다음 B)가 여러 번 반복된다고 해서 그것이 항상 보장되는 것은 아닙니다. 강의에서 이 예제를 통해 보여주고자 한 핵심은 스레드의 실행 순서에 의존하면 동시성 문제가 발생할 수 있다는 것이며, 이러한 문제를 해결하기 위해 ThreadLocal과 같은 방법을 사용해야 한다는 점입니다.

감사합니다.

1

임종민

연휴에 신경써주셔서 감사합니다
이런 프로그램 실행 시 발생하는

현상들이 신기했는데 덕분에
잘 해결된 거 같습니다 감사합니다

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. 임종민님.

먼저 질문해주신 강의는 ‘스프링 핵심 원리 - 고급편’이며, 순서와 관련된 문제를 언급하셨습니다. 말씀하신 상황은 특정 순서로 작동해야 하는 코드나 메서드가 일정하지 않게 실행되는 현상으로 보입니다. 이는 흔히 스레드 간의 불확실한 실행 순서로 인해 발생할 수 있습니다.

문제 설명 및 고려 사항

  • 스레드 관리: 주로 멀티스레딩 환경에서의 변수 상태나 Lock-Release 타이밍에 따라 실행 순서가 다르게 나타날 수 있습니다.
  • 캐싱 또는 최적화 문제: 실행 환경이나 캐시 등의 영향을 받아 실행 결과가 달라질 가능성이 있습니다.
  • 초기 상태 오버헤드: 가비지 컬렉션이나 JIT 컴파일러 최적화 등이 변수로 작용해 첫 실행 시에는 다른 결과가 나타날 수 있습니다.

관련 질문 & 추가 정보

  1. @Order 관련 동작이 다르게 나오는 원인과 해결책

    • Aspect 처리 시 발생하는 순서 제어의 문제점을 다루고 있으며, 특정 주입 순서나 실행 순서를 보장하기 위해 어떤 설정이 필요한지도 설명하고 있습니다.
  2. 이전 강의의 Aspect 실행 순서 문제에 대한 이해와 해결

    • @Order 애노테이션으로 인한 순서 보장 문제를 다루고 있어 어떻게 해결할 수 있을지 더 나은 이해를 제공합니다.

제안드린 링크에서 비슷한 문제를 다룬 다양한 질문을 보실 수 있으며, 이를 참조하시면 문제 해결에 도움이 되실 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.

현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏

추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

어드바이스 순서 디폴트 기준이 궁금합니다.

0

50

1

AspectV1 예제를 @Configuration 수동 등록으로도 가능한가요?

0

77

2

구체 클래스를 상속받아 확장한 형태도 클래스패턴/데코레이터 패턴이라고 칭하나요?

0

49

1

TraceTemplate 을 미리 빈으로 등록해서 사용할때 이렇게 설정하는게 맞는건가요?

0

53

1

Decorator 에서 추상메서드로 뺄때 질문 있습니다.

0

55

1

대상 클래스에 기본 생성자가 없을 때

0

74

1

스프링 부트 버전 4.0 aop 의존성 명칭 변경

1

343

2

final 키워드 사용 관련 질문

0

74

1

안녕하세요

0

64

1

ThradLocal 실무 사례

0

97

2

실무에서의 동시성 문제

0

62

1

로그 등 부가 기능에 대한 테스트코드

0

50

1

ProceedingJoinPoint와 MethodInvocation에 대하여

0

67

1

실무 멀티스레딩에 대한 궁금증

0

69

1

안녕하세요 질문있습니다

0

43

1

AspectV3 aop 실행 순서 문의 드립니다

0

37

1

MDC vs AOP 중에 고민중입니다.

0

74

1

순환참조

0

158

2

this를 단독으로 사용할때랑 파라미터 바인딩 할때 차이

0

77

1

빈 후처리에 등록 질문 있습니다.

0

75

1

AppConfig 설정하는 설명중에 이해가 안되는게 있습니다.

0

88

1

ThreadLocal을 지역변수로 선언하면 remove가 필요할까요?

0

117

2

@Aspect 어노테이션으로 생성된 Advisor의 Bean 저장 여부

0

67

1

ThreadLocal 사용시 부작용이 있을수 있을까요? (ThreadLocal.remove()를 잘한다고 해도..)

0

73

2