해결된 질문
작성
·
274
·
수정됨
1
안녕하세요,
Thread 강의 따라서 코드작성후 cleanThread.start를 실행했을때 출력이 나도코딩님과 다르게 나와서 질문드립니다.
Thread가 들어가긴 한거 같은데 동시에 cleanThread.run 한것처럼 직원분과 사장님이 따로 청소를 합니다.(하지만 run과 다르게 직원분이 아닌 사장님이 먼저 청소를 하고 직원분이 청소를 함)
밑에 출력결과 첨부합니다!
-- 사장 청소 시작 --
(사장)1번방 청소 중
(사장)3번방 청소 중
(사장)5번방 청소 중
(사장)7번방 청소 중
(사장)9번방 청소 중
-- 사장 청소 끝 --
-- 직원 청소 시작 (Thread) --
(직원)2번방 청소 중
(직원)4번방 청소 중
(직원)6번방 청소 중
(직원)8번방 청소 중
(직원)10번방 청소 중
-- 직원 청소 끝 (Thread) --
답변 1
1
※ 과거에 있었던 유사한 질문에 대한 답변글입니다. 참고 부탁드려요 😉
https://www.inflearn.com/questions/767101
안녕하세요?
강의에서 다룬 예제는 너무 빠르게 실행되는 코드라서 쓰레드 처리를 했을 때도 경험하신 것처럼 실행 결과가 뒤섞이지 않은 경우를 종종 볼 수 있답니다. 아마 10번 정도 계속 반복해서 실행하시다보면 조금씩 달라지는 결과가 나올 수도 있는데요.
현재 작성하신 코드에서 두 작업이 동시에 실행되는지를 보다 명확히 확인하려면 임의의 시간만큼 대기하는 Thread.sleep(ms) 를 넣어보시면 됩니다.
아래와 같이 반복문 내에 각각 수정해주시면 되며, 이는 사장 또는 직원이 하나의 방을 청소할 때마다 500 ms, 즉 0.5 초씩 대기하게 됩니다. 주석 처리된 부분을 참고해주세요.
...
public static void cleanByBoss() {
System.out.println("-- 사장 청소 시작 --");
for (int i = 1; i <= 10; i += 2) {
System.out.println("(사장) " + i + "번방 청소 중");
//////////// 코드 추가된 부분 ///////////////
try {
Thread.sleep(500);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
//////////// 코드 추가된 부분 ///////////////
}
System.out.println("-- 사장 청소 끝 --");
}
public class CleanThread extends Thread {
public void run() {
System.out.println("-- 직원 청소 시작 (Thread) --");
for (int i = 2; i <= 10; i += 2) {
System.out.println("(직원) " + i + "번방 청소 중 (Thread)");
//////////// 코드 추가된 부분 ///////////////
try {
Thread.sleep(500);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
//////////// 코드 추가된 부분 ///////////////
}
System.out.println("-- 직원 청소 끝 (Thread) --");
}
}
실행해보시면 이번에는 뒤섞인 결과를 확인하실 수 있을 거에요 😊
감사합니다.