RestTemplate 호출하여 응답기다릴때도 runnable 이 맞나요?
446
작성한 질문수 8
우선 좋은 강의 감사드립니다.
강의내용중 running -> runnable 로 이동하는 방법에 yield, I/O 가 있다고 하셨는데, DB query 등을 하면 응답이 올때까지 waiting으로 상태변경이 되는게 아닐까 싶어 샘플코드를 짜보니 정말로 running-> runnable 상태이던데,
1) 응답이 올때까지 기다리는 것이기도 하고
2) runnable 이면 언제라도 running이 될수 있는데, 이 경우 running -> runnable -> running 으로 상태변경되었는데 아직 응답이 오지 않았으면 다시 runnable 로 넘어가고.. 이런게 반복되는건가요?
샘플코드는 아래와 같이 만들어봤습니다.
RestTemplate template = new RestTemplate();
template.getEntity(xxx); // 응답이 10초 걸리는 api 호출
10초 내에 위 작업을 하는 쓰레드의 상태를 log 로 찍으니 runnable 로 나왔습니다.
답변 1
1
네
사실 자바 스레드에서 WAIT 상태는 의미적으로는 스레드가 대기한다는 개념이 맞지만 상태 값 자체를 봤을 때는 동기화의 영역에서 Object.wait() 메서드를 호출할 때 발생하는 상태 개념이라 볼 수 있습니다.
자바에서 스레드가 IO 에 걸리게 되면 이것이 시스템 콜 호출을 이용하여 작업을 처리하고, 이 과정에서 스레드는 OS 수준에서 관리되게 됩니다. 즉 대기 상태가 OS 수준에서 이루어지는 것이고 그렇다면 자바는 실행대기 상태로 계속 머문다는 의미가 됩니다.
그렇다면 OS 는 스레드 상태가 WAITING 일 가능성이 높습니다.
자바가 스레드를 자체적으로 관리하지 않고 상당 부분은 OS 의 실행 흐름에 의존하기 때문에 일어나는 현상이라 이해하시면 될 것 같습니다.
멀티스레드 단일스레드
0
58
0
new Condition 부분 질문
0
87
1
13:00 강의 내용 이해 질문
0
99
1
강의 출시 질문 있습니다.
0
119
1
InterruptedExceptionThreadStopExample 질문입니다.
0
95
2
instance.getMyField()의 값이 왜 다른가요?
0
116
1
해당 강의 내용 무단 도용 신고
0
212
2
Thread Waiting 상태 관련 질문 드립니다.
0
187
1
단일연산변수 api
0
126
0
synchronized 블럭과 메인메모리 반영
0
148
0
실무에서 자바가 제공하는 락을 사용하는 경우
1
244
1
뮤텍스나 세마포어는 busy waiting이 없는 게 맞을까요?
0
161
1
16:50부분에서 타입락 질문드립니다.
0
111
2
16분 7초 뮤텍스 코드 관련해 질문드립니다.
0
161
2
동기화가 보장된다고 하더라도 스레드간 데이터 불일치가 발생할 수 있지 않나요??
0
203
2
리액티브-part2
0
180
2
문자열 풀 값을 이용한 String 변수
0
208
2
스레드 라이브러리는 커널과 같은 역할을 하지 못하나요?
0
174
1
자식 프로세스를 쓰는 이유
0
189
1
커널 모드 전환시 질문이 있습니다!
0
147
1
[공유] setName 시 threadName이 1부터 시작하는 이유
0
180
1
synchronized = 모니터
0
290
2
Thread의 Context Switching 문의드립니다.
1
261
1
동기 & 논블록킹 질문 드립니다.
0
234
2





