inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

Thread

Thread 강의 질문

해결된 질문

314

pjg1141

작성한 질문수 1

1

 안녕하세요,

Thread 강의 따라서 코드작성후 cleanThread.start를 실행했을때 출력이 나도코딩님과 다르게 나와서 질문드립니다.

Thread가 들어가긴 한거 같은데 동시에 cleanThread.run 한것처럼 직원분과 사장님이 따로 청소를 합니다.(하지만 run과 다르게 직원분이 아닌 사장님이 먼저 청소를 하고 직원분이 청소를 함)

밑에 출력결과 첨부합니다!

 

 


-- 사장 청소 시작 --

(사장)1번방 청소 중

(사장)3번방 청소 중

(사장)5번방 청소 중

(사장)7번방 청소 중

(사장)9번방 청소 중

-- 사장 청소 끝 --

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

(직원)2번방 청소 중

(직원)4번방 청소 중

(직원)6번방 청소 중

(직원)8번방 청소 중

(직원)10번방 청소 중

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

 

객체지향 oop java

답변 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) --");
    }
}

실행해보시면 이번에는 뒤섞인 결과를 확인하실 수 있을 거에요 😊
감사합니다.

자바를 처음 배울 때 이런 고민이 드는 게 정상일까요?

1

146

2

static이 뭐였는지 기억이 안나요 ㅜㅜ

0

119

2

Iterator (알 수 없음) 데이터 삭제 후 초기화 관련 문의

0

72

1

사고력 키우는 법이 어떤게 있나요?

0

94

2

getter setter

0

103

2

섹션9. 66 메소드 오버로딩 시 질문이 있습니다.

0

80

1

안녕하세요 갑자기 프로그램 에러가 떠서 안되네요

0

76

2

변수 이름짓는법

0

114

2

intelli J 실행오류

0

115

2

혹시 이건 수학적 사고가 부족한 걸까요?

0

152

2

영상이 재생이 안됩니다.

0

167

3

이중 반복문 (후반전) 오른쪽으로 치우친 별 쌓기에 질문이 있습니다.

0

117

2

응용이 어렵습니다.

0

206

2

IntelliJ가 보이지 않습니다.

0

187

3

JDK 버전 문의

0

130

2

BlackBox 파일 내에서 메소드 정의

0

136

1

동기화

0

123

2

Iterator 문의

0

105

1

코드 순서 문의

0

143

1

클래스 메소드

0

150

2

Quiz_05 관련 질문드립니다 !

0

118

2

다운로드가 안됩니다

0

165

2

다형성

0

120

2

HashMap

0

81

2