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

김아현님의 프로필 이미지
김아현

작성한 질문수

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

Runnable

쓰레드 클래스 질문이요

작성

·

295

·

수정됨

0

 앞에 Thread강의에서는 객체생성하고 start() 함수만 써서 실행했는데

이번 강의는 cleanRunnable.start() 안쓰고

Thread 객체를 추가로 사용하셨는데 이 쓰레드 객체가 왜 쓰였는지 궁금합니다

답변 2

1

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

안녕하세요?
먼저 쓰레드를 구현하기 위해서는 Thread 클래스를 직접 상속하거나 Runnable 인터페이스를 구현하는 방법을 사용할 수 있습니다.

1) Thread 클래스를 직접 상속

public class CleanThread extends Thread {
    public void run() { ... }
}
CleanThread cleanThread = new CleanThread();
cleanThread.start();

2) Runnable 인터페이스를 구현

public class CleanRunnable implements Runnable {
    public void run() { ... }
}
CleanRunnable cleanRunnable = new CleanRunnable();
Thread thread = new Thread(cleanRunnable);
thread.start();

다른 클래스를 이미 상속하는 경우라면 Thread 클래스도 상속할 수는 없기 때문에 보통 Runnable 인터페이스를 구현하는 식으로 활용하는데요.

Runnable 인터페이스에는 start() 메소드가 없고 run() 메소드만 있습니다. run() 메소드를 그대로 호출하게 되면 이는 별도의 쓰레드를 생성하여 동시에 실행되는 것이 아니라 그냥 일반적인 메소드가 호출되는 것과 같아요. 그래서 Runnable 인터페이스를 구현한 클래스(예제에서는 CleanRunnable)로부터 객체(예제에서는 cleanRunnable)를 만들게 되면, 새로운 Thread 객체(예제에서는 thread)를 만들면서 생성자의 전달값으로 이를 전달해줘야 합니다. 그래야 start() 메소드를 호출할 수 있게 되고 결과적으로 새로 만들어진 쓰레드에서 run() 메소드에 정의된 동작이 실행될 수 있답니다 😊

감사합니다.

김아현님의 프로필 이미지
김아현
질문자

아 설명 감사합니다! 제가 착각하고있었네요 Thread클래스랑 Runnable인터페이스랑 사용자가 만든 01Thread 02Runnable 클래스랑 이름이 비슷하다보니 머릿속에서 살짝 꼬였었는데 단번에 이해했습니다

0

Runnable 강좌에서 쓰레드 객체를 만들려는데 자꾸 lang이 붙어서 객체 생성이 안돼요 ㅠㅠ

김아현님의 프로필 이미지
김아현

작성한 질문수

질문하기