해결된 질문
작성
·
110
0
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)
[질문 내용]
여기에 질문 내용을 남겨주세요.
강의에서 sleep을 주석 처리하고나서
실행결과가 처음엔 B -> A로 나오더라고요
재실행했을 땐 A -> B 순서로 잘 나옵니다
그래서 주석을 다시 풀고 실행한 뒤
다시 주석 적용하고 실행시키니까
처음만 B -> A 순서로 나오고
그 뒤로는 A -> B 로 나오더라고요
신기해서 질문남겨봅니다
답변 2
0
안녕하세요. 임종민님
처음 실행했을 때 B -> A 순서로 나온 것은 그 시점의 운영체제 스케줄러가 thread-B에게 먼저 CPU 시간을 할당했기 때문일 수 있습니다. 시스템 상태, 백그라운드 작업, JVM 내부 요인 등 다양한 이유로 첫 실행 시 스케줄링이 특정 방식으로 결정될 수 있습니다. 하지만 이후에 다시 실행했을 때 A -> B 순서가 일관되게 나왔다면, 이는 해당 프로그램의 특성(간단하고 실행 시간이 짧음)과 특정 실행 환경(운영체제, 하드웨어, JVM 버전 등)에서 스케줄러가 해당 스레드들에게 비교적 일관된 순서로 CPU 시간을 할당하는 경향을 보인 결과일 수 있습니다.
결론적으로, 스레드 실행 순서는 비결정적(non-deterministic)이며 실행 환경에 따라 달라질 수 있습니다. 특정 실행 순서(예: A 다음 B)가 여러 번 반복된다고 해서 그것이 항상 보장되는 것은 아닙니다. 강의에서 이 예제를 통해 보여주고자 한 핵심은 스레드의 실행 순서에 의존하면 동시성 문제가 발생할 수 있다는 것이며, 이러한 문제를 해결하기 위해 ThreadLocal과 같은 방법을 사용해야 한다는 점입니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다. 임종민님.
먼저 질문해주신 강의는 ‘스프링 핵심 원리 - 고급편’이며, 순서와 관련된 문제를 언급하셨습니다. 말씀하신 상황은 특정 순서로 작동해야 하는 코드나 메서드가 일정하지 않게 실행되는 현상으로 보입니다. 이는 흔히 스레드 간의 불확실한 실행 순서로 인해 발생할 수 있습니다.
이전 강의의 Aspect
실행 순서 문제에 대한 이해와 해결
@Order
애노테이션으로 인한 순서 보장 문제를 다루고 있어 어떻게 해결할 수 있을지 더 나은 이해를 제공합니다.제안드린 링크에서 비슷한 문제를 다룬 다양한 질문을 보실 수 있으며, 이를 참조하시면 문제 해결에 도움이 되실 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
연휴에 신경써주셔서 감사합니다
이런 프로그램 실행 시 발생하는
현상들이 신기했는데 덕분에
잘 해결된 거 같습니다 감사합니다