해결된 질문
작성
·
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() 을 포함시키게 될 텐데, 이렇게 하고 실행하게 되면 확연한 차이를 느끼실 수 있을 것으로 생각됩니다 😊
참고로 쓰레드는 실행 순서를 보장하기 않기 때문에 실행할 때마다 순서가 바뀔 수도 있으며, 이는 정상적인 동작입니다.
감사합니다.
0
다시 여러 번 돌려보니 사장님이 다 청소 한 뒤에 직원분이 청소를 시작하는 것으로 출력됩니다. 혹시 동시에 실행되는 건데 컴퓨터 성능이 좋지 않아서 실행 속도가 차이나는 것일까요?
0
방금 runnable 실행 해봤는데 아까랑 결과가 달라졌습니다.
-- 사장 청소 시작 --
-- 직원 청소 시작 (Runnable) --
(사장) 1번방 청소 중
(직원) 2번방 청소 중 (Runnable)
(직원) 4번방 청소 중 (Runnable)
(직원) 6번방 청소 중 (Runnable)
(직원) 8번방 청소 중 (Runnable)
(직원) 10번방 청소 중 (Runnable)
--직원 청소 끝 -- (Runnable)
(사장) 3번방 청소 중
(사장) 5번방 청소 중
(사장) 7번방 청소 중
(사장) 9번방 청소 중
--사장 청소 끝 --
뭔가 싶어서 다시 한 번 돌리니 다시 맨 처음 결과와 똑같이 나왔습니다.
말씀해주신대로 뒷부분에 sleep()을 넣게되니 확연한 차이가 있었습니다. 제가 착각을 했었던 거네요 ㅎㅎ. 답변 감사드립니다!