인프런 커뮤니티 질문&답변

후추님의 프로필 이미지
후추

작성한 질문수

나도코딩의 자바 기본편 - 풀코스 (20시간)

Runnable

Thread가 동시에 실행이 안됩니다.

해결된 질문

작성

·

432

0

 안녕하세요! 좋은 강의 감사합니다.

다름이 아니라 Thread편과 Runnable편에서 나도코딩님이 쓰신 코드를 그대로 써서 실행을 했는데요.

Thread가 동시에 실행되지 않고 사장 청소가 다 실행되고 나서 직원 청소가 진행이 됩니다.

Thread가 동시에 실행되지 않는 이유를 스스로 찾지는 못했습니다.

혹시 제가 쓰고 있는 컴퓨터가 성능이 안 좋은 것도 영향이 있나요? 실행을 누르면 7초에서 10초 뒤에 실행이 완료됩니다.

 

답변해주시면 감사하겠습니다. 좋은 하루 되세요!

(밑에 실행 결과 첨부하겠습니다.)

결과:

-- 사장 청소 시작 --

(사장) 1번방 청소 중

(사장) 3번방 청소 중

(사장) 5번방 청소 중

(사장) 7번방 청소 중

(사장) 9번방 청소 중

--사장 청소 끝 --

-- 직원 청소 시작 (Thread) --

(직원) 2번방 청소 중 (Thread)

(직원) 4번방 청소 중 (Thread)

(직원) 6번방 청소 중 (Thread)

(직원) 8번방 청소 중 (Thread)

(직원) 10번방 청소 중 (Thread)

--직원 청소 끝 -- (Thread)

 

답변 3

1

나도코딩님의 프로필 이미지
나도코딩
지식공유자

안녕하세요?
청소하는 반복문 속에 아직 Thread.sleep() 는 포함되어 있지 않은 상황이신거죠? 예제에서 제공되는 코드는 너무 빠르게 동작하다 보니 작성하신 것처럼 출력결과 상으로는 사장이 청소를 다 끝내고 직원이 청소를 하거나, 또는 반대로 될 수도 있습니다. 아마 수차례 실행하시다 보면 조금씩 조금씩 결과가 달라져 보일 거에요.
쓰레드 섹션의 뒷쪽 내용을 조금 더 학습하시면 for 반복문 속에 어느 정도 시간이 걸리는 듯한 작업을 흉내내기 위해 sleep() 을 포함시키게 될 텐데, 이렇게 하고 실행하게 되면 확연한 차이를 느끼실 수 있을 것으로 생각됩니다 😊
참고로 쓰레드는 실행 순서를 보장하기 않기 때문에 실행할 때마다 순서가 바뀔 수도 있으며, 이는 정상적인 동작입니다.
감사합니다.

후추님의 프로필 이미지
후추
질문자

말씀해주신대로 뒷부분에 sleep()을 넣게되니 확연한 차이가 있었습니다. 제가 착각을 했었던 거네요 ㅎㅎ. 답변 감사드립니다!

나도코딩님의 프로필 이미지
나도코딩
지식공유자

확인 댓글 감사드립니다 ^^ 좋은 주말 보내시고, 공부하시다가 또다른 질문 생기시면 언제든지 남겨주세요. 감사합니다.

0

후추님의 프로필 이미지
후추
질문자

다시 여러 번 돌려보니 사장님이 다 청소 한 뒤에 직원분이 청소를 시작하는 것으로 출력됩니다. 혹시 동시에 실행되는 건데 컴퓨터 성능이 좋지 않아서 실행 속도가 차이나는 것일까요?

0

후추님의 프로필 이미지
후추
질문자

방금 runnable 실행 해봤는데 아까랑 결과가 달라졌습니다.

-- 사장 청소 시작 --

-- 직원 청소 시작 (Runnable) --

(사장) 1번방 청소 중

(직원) 2번방 청소 중 (Runnable)

(직원) 4번방 청소 중 (Runnable)

(직원) 6번방 청소 중 (Runnable)

(직원) 8번방 청소 중 (Runnable)

(직원) 10번방 청소 중 (Runnable)

--직원 청소 끝 -- (Runnable)

(사장) 3번방 청소 중

(사장) 5번방 청소 중

(사장) 7번방 청소 중

(사장) 9번방 청소 중

--사장 청소 끝 --

뭔가 싶어서 다시 한 번 돌리니 다시 맨 처음 결과와 똑같이 나왔습니다.

 

후추님의 프로필 이미지
후추

작성한 질문수

질문하기